Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Переучивание с MS SQL на MySQL / 20 сообщений из 20, страница 1 из 1
19.07.2013, 19:04:03
    #38337457
MicrosoftProjectRU
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переучивание с MS SQL на MySQL
Нужно написать N хранимых процедур на MySQL. Имею большую практику работы на MS SQL.

Хотелось бы комментов в плане какие идеологические отличия есть в написании SP для MySQL.
В частности для MS SQL есть набор бест практик. Насколько они работают в MySQL?

1) MS SQL не любит очень сложные запросы. Поэтому обычно разработчик разбивает сложный запрос на несколько проходов перекладывая промежуточные данные между временными таблицами (или физическими разрезанными по номеру процесса в сервере через @@spid)
Техника выглядит примерно так

insert TempTable1.... select ...Q1..
insert TempTable2... select ....Q2
select ... from TempTable1, TempTable2.....

Такое в MS SQL будет на сложном запросе работать быстрее чем очень сложный select комбирующий запросы Q1 и Q2
Также в MySQL?

2) Что быстрее временные таблицы в памяти или кешируемые таблицы на диске в MySQL?
В MS SQL фактически нет разницы из-за очень эффективного кеширования диска. Реально опытные девелоперы обычно пишут в физические таблицы разделяя разных юзеров по номеру процесса (@@spid)

Также в MySQL? Или иная бестпрактика хранения временных результатов вычислений?

3) Насколько быстры SP в MySQL? Есть ли какой-то основной подводный камень роняющий производительность?

Заранее благодарен за помощь. :)
...
Рейтинг: 0 / 0
19.07.2013, 19:14:26
    #38337461
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переучивание с MS SQL на MySQL
авторMS SQL не любит очень сложные запросы.
а MS SQL об этом знает?
...
Рейтинг: 0 / 0
19.07.2013, 21:08:47
    #38337550
netwind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переучивание с MS SQL на MySQL
Так вы как не зададите вопрос, так вечно какой-то холивар. Возьмите, переучитесь. Нам потом расскажите. В бложик напишите.

автор1) MS SQL не любит очень сложные запросы. Поэтому обычно разработчик разбивает сложный запрос на несколько проходов
Ну если он вообще не думает, то может такая практика и окупается. Со стороны выглядит странно.


автор2) Что быстрее временные таблицы в памяти или кешируемые таблицы на диске в MySQL?
Явного понятия "кешируемые таблицы" в mysql нет. Не очень понятно, что вы там имели ввиду.
Так что быстрее временные таблицы.
Никогда не угадаешь будет ли innodb сейчас же записывать данные на диск или будет ждать завершения транзакции. С временными таблицами есть определенность.

автор3) Насколько быстры SP в MySQL? Есть ли какой-то основной подводный камень роняющий производительность?
Фактически, нет компиляции кода. Компилируется, но с кучей оговорок.
Проблемная реализация курсоров в виде временных таблиц.
...
Рейтинг: 0 / 0
19.07.2013, 21:27:21
    #38337563
MicrosoftProjectRU
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переучивание с MS SQL на MySQL
Уже переучился. Менее часа.

Вопрос с правами только какой-то странный. Наверное к хостеру.
...
Рейтинг: 0 / 0
25.07.2013, 18:19:47
    #38344178
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переучивание с MS SQL на MySQL
автор1) MS SQL не любит очень сложные запросы.

Это утверждение одновременно и ложное в отношении MSSQL, и правильное в отношении любой используемой реляционной СУБД.
Потому что всегда есть случаи, когда требуется отобрать какие-то записи по сложному критерию, а потом с ними сделать несколько десятков действий. В таких случаях вышеописанная техника оправдана.

авторТакже в MySQL?

Нет, не так. Зависит от запросов и задачи. Общих случаев нет.
Вообще, в оптимизации запросов нет общих случаев. Можешь запомнить себе на будущее как одно единственно верное и работающее всегда правило в отношении оптимизации запросов.

автор2) Что быстрее временные таблицы в памяти или кешируемые таблицы на диске в MySQL?
В MS SQL фактически нет разницы из-за очень эффективного кеширования диска. Реально опытные девелоперы обычно пишут в физические таблицы разделяя разных юзеров по номеру процесса (@@spid)

Также в MySQL? Или иная бестпрактика хранения временных результатов вычислений?


Как кэширование может быть неэффективным -- я не очень понимаю. Оно либо есть, тогда оно эффективно, потому что скорость чтения памяти -- наносекунды, а дистка -- милисекунды, либо его нет, тогда и говорить не о чем.
Временные таблицы ни там, ни там особенно ничем не отличаются от обычных.

Сложно ответить на вопрос, в общем.

автор3) Насколько быстры SP в MySQL? Есть ли какой-то основной подводный камень роняющий производительность?


В MSSQL и MySQL процедуры оптимизируются по-разному (строятся планы для запросов по-разному, и храняться они по-разному). Это следует учитывать. В MSSQL есть кэш для планов запросов. В MySQL его нет.
Само исполнение кода PL неважно, потому что оно гораздо меньше, чем время выполнения запросов.
...
Рейтинг: 0 / 0
25.07.2013, 18:22:38
    #38344179
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переучивание с MS SQL на MySQL
netwindНикогда не угадаешь будет ли innodb сейчас же записывать данные на диск или будет ждать завершения транзакции.


Так хватает места в кэше -- не будет записываться. Не хватает -- будет. Всё ясно.
Кстати, от факта завершения или незавершения транзакции это не зависит.

netwindС временными таблицами есть определенность.


Какая ? Ну-ка, расскажи...
...
Рейтинг: 0 / 0
25.07.2013, 19:03:03
    #38344234
Arhat109
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переучивание с MS SQL на MySQL
MicrosoftProjectRU,

На первый пост:

по п.1 - какую-то аргументацию в чиселках привести - можете? А то у меня как-то всё наоборот получается...

Select ... from (select ... from table1 where... group by ... having ... limit ...) as tmp1
join (select ... from table2 where ... group by ... having ... limit ...) as tmp2 on tmp2.key = tmp1.key
where ... group by ... having ...

как-то завсегда быстрее работало чем вставки в таблички с последующим объединением. Что я делаю "не так"?

Приведите плиз какие-нибудь свои тесты что-ли...

п.3. По моим замерам stored procedure проигрывают запросу "в лоб" около 30% времени выполнения.
...
Рейтинг: 0 / 0
25.07.2013, 21:18:02
    #38344370
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переучивание с MS SQL на MySQL
Arhat109по п.1 - какую-то аргументацию в чиселках привести - можете? А то у меня как-то всё наоборот получается...
как-то завсегда быстрее работало чем вставки в таблички с последующим объединением. Что я делаю "не так"?


Это как раз тот случай, когда пример тебе ничего не докажет. Ни положительный, ни отрицательный.

Arhat109п.3. По моим замерам stored procedure проигрывают запросу "в лоб" около 30% времени выполнения.

Смотря какие запрос и процедура.
...
Рейтинг: 0 / 0
25.07.2013, 21:20:45
    #38344375
netwind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переучивание с MS SQL на MySQL
MasterZivnetwindНикогда не угадаешь будет ли innodb сейчас же записывать данные на диск или будет ждать завершения транзакции.


Так хватает места в кэше -- не будет записываться. Не хватает -- будет. Всё ясно.
Кстати, от факта завершения или незавершения транзакции это не зависит.

Да нет, еще вариантов много - кеш ос, настройки монтирования файловой системы, настройки фиксации innodb, размеры файлов логов. Стоит ли связываться, если совершенно точно известно, что содержимое временных таблиц не записывается на диск никогда ?
...
Рейтинг: 0 / 0
26.07.2013, 05:57:00
    #38344559
Arhat109
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переучивание с MS SQL на MySQL
MasterZiv,

Не скажите. Впрочем, разводить холивар и теоретизирование без примеров - не вижу смысла.

Мне, всёж-таки, хочется услышать ответ автора, он пишет достаточно сумбурно, но все-таки интересные вещи.

Потому что написано им "априори": "... поэтому разработчик..." - то есть утверждается что разработчики MS SQL - тупо вынуждены ТАК поступать.

Вот и хотелось увидеть в каких конкретно случаях ПРИХОДИТСЯ так поступать.
...
Рейтинг: 0 / 0
26.07.2013, 07:44:26
    #38344585
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переучивание с MS SQL на MySQL
Arhat109Select ... from (select ... from table1 where... group by ... having ... limit ...) as tmp1
join (select ... from table2 where ... group by ... having ... limit ...) as tmp2 on tmp2.key = tmp1.key
where ... group by ... having ...

как-то завсегда быстрее работало чем вставки в таблички с последующим объединением. Что я делаю "не так"?А у меня не завсегда. Если те таблички индексировать, конечно (т.к. глупый мускль кроме нестедлупов ничего не умеет... а может, это я глупый и не умею его готовить :) ). Если не индексировать - ясное дело, будет медленнее (правда, совсем ненамного).
netwindесли совершенно точно известно, что содержимое временных таблиц не записывается на диск никогда ?шоправда? а вот этот параметр тогда зачем? или речь о каких-то других временных таблицах?
...
Рейтинг: 0 / 0
26.07.2013, 09:45:28
    #38344676
Arhat109
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переучивание с MS SQL на MySQL
tanglir,

Дык! Вот я и хочу послушать АВТОРА... у меня "завсегда"... мож просто НЕ сталкивался... у вас НЕ завсегда, у Мастера Зива - ваще сферический конь в вакууме...

А меня интересует ПОЧЕМУ автор написал так как написал: "поэтому обычно"... как это? То есть на типовых задачах MS SQL - откровенно тупит и пытается реализовать запрос БЕЗ временных табличек (видимо как зависимые) и ему НАДО явно указывать создание временных таблиц?!?

, вроде как даже Мускуль - на каждый вложенный во from подзапрос тупо сам создает такую табличку... ещё и в эксплайн пишет derived table ("сам придумал")...
...
Рейтинг: 0 / 0
26.07.2013, 10:24:36
    #38344736
netwind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переучивание с MS SQL на MySQL
tanglirnetwindесли совершенно точно известно, что содержимое временных таблиц не записывается на диск никогда ?шоправда? а вот этот параметр тогда зачем? или речь о каких-то других временных таблицах?
правда.
при достижении этого параметра временная таблица перестает работать.
...
Рейтинг: 0 / 0
26.07.2013, 10:29:39
    #38344742
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переучивание с MS SQL на MySQL
netwindправда.
при достижении этого параметра временная таблица перестает работать.вот так прямо с ошибкой и вываливается? ссылку на багрепорт можно?
...
Рейтинг: 0 / 0
26.07.2013, 10:30:44
    #38344743
netwind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переучивание с MS SQL на MySQL
netwindtanglirпропущено...
шоправда? а вот этот параметр тогда зачем? или речь о каких-то других временных таблицах?
правда.
при достижении этого параметра временная таблица перестает работать.
А, нет, это MEMORY перестанет работать.
Ну все равно значительно проще этот процесс контролировать нежели использовать таблицы innodb даже внутри одной транзакции.
...
Рейтинг: 0 / 0
26.07.2013, 11:46:21
    #38344897
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переучивание с MS SQL на MySQL
netwindНу все равно значительно проще этот процесс контролировать нежели использовать таблицы innodb даже внутри одной транзакции.Ну, "контролировать" можно и подкручивая join_buffer_size.
...
Рейтинг: 0 / 0
26.07.2013, 13:30:04
    #38345141
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переучивание с MS SQL на MySQL
Основной нюанс при переходе от МС СКЛ на МУскл аналогичный - куча мата и перемата, что нету вродебы обыденых вещей, и постоянный вопрос - и какой дебил это придумал, зачем хуже, если уже было решение лучше :)

примеры -
нету нумератора строк результата выборки
про курсоры писали выше
нету компиляции кода
я както было тоже задавлся мыслями очередное решение для субд сделать не на мс скл а на мускле... но потом сделал на постгри.

понял что если мы хотим просто база данных, то мускл рулит
если это как дефакто ядро не хилой системы, то мускл разве что как вспомагательный елемент для простых выборок преагрегированных значений.
(у меня была статистика работы системы, вот сайт использовал мускл, поэтому в результате весь серверный код наполняющий таблицы статистик писал в постгри, а все агрегированые отчоты, доступные с сайта, брали выборки (фильтр + иногда ещо добавочная агрегация) уже с мускла.

так что мой совет.
если шариш хорошо в мс скл, и надо другое изза юникса, то сразу смотреть в бесплатную версию постгри.
...
Рейтинг: 0 / 0
26.07.2013, 16:52:08
    #38345654
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переучивание с MS SQL на MySQL
авторМне, всёж-таки, хочется услышать ответ автора, он пишет достаточно сумбурно, но все-таки интересные вещи.

Потому что написано им "априори": "... поэтому разработчик..." - то есть утверждается что разработчики MS SQL - тупо вынуждены ТАК поступать.

Вот и хотелось увидеть в каких конкретно случаях ПРИХОДИТСЯ так поступать.

Да не интересно это всё, товарищь MPRU это всё просто тупо выдумывает.
Разработчики на MSSQL НЕ вынуждены так поступать, они вообще никак не вынуждены поступать.
Видимо, какой-то один разработчик рассказал MPRU о одном случае, когда применив такую технику удалось что-то ускорить, а он решил, что это -- общее место.

НА самом деле, когда-то это полезно для производительности, причём НА ЛЮБОЙ СУБД, когда-то -- вредно.
От СУБД это не зависит, зависит исключительно от задачи.
...
Рейтинг: 0 / 0
26.07.2013, 17:10:25
    #38345696
Arhat109
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переучивание с MS SQL на MySQL
MasterZiv,

Мне, всё-таки, хочется услышать автора (хотя, если не объявится в ближайшее время, решу что вы правы: пошутил-с), а не наши с Вами "домыслы". В конце-концов, "сумбурность" высказываний можно же преодолеть как-то... вот и поинтересовался конкретикой. Давайте подождем таки.
...
Рейтинг: 0 / 0
29.07.2013, 01:09:37
    #38346917
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переучивание с MS SQL на MySQL
Модератор: Флуд/оффтоп зачищен, категорически прошу не возобновлять.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Переучивание с MS SQL на MySQL / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]