|
|
|
Переучивание с MS SQL на MySQL
|
|||
|---|---|---|---|
|
#18+
Нужно написать 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? Есть ли какой-то основной подводный камень роняющий производительность? Заранее благодарен за помощь. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2013, 19:04:03 |
|
||
|
Переучивание с MS SQL на MySQL
|
|||
|---|---|---|---|
|
#18+
авторMS SQL не любит очень сложные запросы. а MS SQL об этом знает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2013, 19:14:26 |
|
||
|
Переучивание с MS SQL на MySQL
|
|||
|---|---|---|---|
|
#18+
Так вы как не зададите вопрос, так вечно какой-то холивар. Возьмите, переучитесь. Нам потом расскажите. В бложик напишите. автор1) MS SQL не любит очень сложные запросы. Поэтому обычно разработчик разбивает сложный запрос на несколько проходов Ну если он вообще не думает, то может такая практика и окупается. Со стороны выглядит странно. автор2) Что быстрее временные таблицы в памяти или кешируемые таблицы на диске в MySQL? Явного понятия "кешируемые таблицы" в mysql нет. Не очень понятно, что вы там имели ввиду. Так что быстрее временные таблицы. Никогда не угадаешь будет ли innodb сейчас же записывать данные на диск или будет ждать завершения транзакции. С временными таблицами есть определенность. автор3) Насколько быстры SP в MySQL? Есть ли какой-то основной подводный камень роняющий производительность? Фактически, нет компиляции кода. Компилируется, но с кучей оговорок. Проблемная реализация курсоров в виде временных таблиц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2013, 21:08:47 |
|
||
|
Переучивание с MS SQL на MySQL
|
|||
|---|---|---|---|
|
#18+
Уже переучился. Менее часа. Вопрос с правами только какой-то странный. Наверное к хостеру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2013, 21:27:21 |
|
||
|
Переучивание с MS SQL на MySQL
|
|||
|---|---|---|---|
|
#18+
автор1) MS SQL не любит очень сложные запросы. Это утверждение одновременно и ложное в отношении MSSQL, и правильное в отношении любой используемой реляционной СУБД. Потому что всегда есть случаи, когда требуется отобрать какие-то записи по сложному критерию, а потом с ними сделать несколько десятков действий. В таких случаях вышеописанная техника оправдана. авторТакже в MySQL? Нет, не так. Зависит от запросов и задачи. Общих случаев нет. Вообще, в оптимизации запросов нет общих случаев. Можешь запомнить себе на будущее как одно единственно верное и работающее всегда правило в отношении оптимизации запросов. автор2) Что быстрее временные таблицы в памяти или кешируемые таблицы на диске в MySQL? В MS SQL фактически нет разницы из-за очень эффективного кеширования диска. Реально опытные девелоперы обычно пишут в физические таблицы разделяя разных юзеров по номеру процесса (@@spid) Также в MySQL? Или иная бестпрактика хранения временных результатов вычислений? Как кэширование может быть неэффективным -- я не очень понимаю. Оно либо есть, тогда оно эффективно, потому что скорость чтения памяти -- наносекунды, а дистка -- милисекунды, либо его нет, тогда и говорить не о чем. Временные таблицы ни там, ни там особенно ничем не отличаются от обычных. Сложно ответить на вопрос, в общем. автор3) Насколько быстры SP в MySQL? Есть ли какой-то основной подводный камень роняющий производительность? В MSSQL и MySQL процедуры оптимизируются по-разному (строятся планы для запросов по-разному, и храняться они по-разному). Это следует учитывать. В MSSQL есть кэш для планов запросов. В MySQL его нет. Само исполнение кода PL неважно, потому что оно гораздо меньше, чем время выполнения запросов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2013, 18:19:47 |
|
||
|
Переучивание с MS SQL на MySQL
|
|||
|---|---|---|---|
|
#18+
netwindНикогда не угадаешь будет ли innodb сейчас же записывать данные на диск или будет ждать завершения транзакции. Так хватает места в кэше -- не будет записываться. Не хватает -- будет. Всё ясно. Кстати, от факта завершения или незавершения транзакции это не зависит. netwindС временными таблицами есть определенность. Какая ? Ну-ка, расскажи... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2013, 18:22:38 |
|
||
|
Переучивание с MS SQL на MySQL
|
|||
|---|---|---|---|
|
#18+
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% времени выполнения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2013, 19:03:03 |
|
||
|
Переучивание с MS SQL на MySQL
|
|||
|---|---|---|---|
|
#18+
Arhat109по п.1 - какую-то аргументацию в чиселках привести - можете? А то у меня как-то всё наоборот получается... как-то завсегда быстрее работало чем вставки в таблички с последующим объединением. Что я делаю "не так"? Это как раз тот случай, когда пример тебе ничего не докажет. Ни положительный, ни отрицательный. Arhat109п.3. По моим замерам stored procedure проигрывают запросу "в лоб" около 30% времени выполнения. Смотря какие запрос и процедура. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2013, 21:18:02 |
|
||
|
Переучивание с MS SQL на MySQL
|
|||
|---|---|---|---|
|
#18+
MasterZivnetwindНикогда не угадаешь будет ли innodb сейчас же записывать данные на диск или будет ждать завершения транзакции. Так хватает места в кэше -- не будет записываться. Не хватает -- будет. Всё ясно. Кстати, от факта завершения или незавершения транзакции это не зависит. Да нет, еще вариантов много - кеш ос, настройки монтирования файловой системы, настройки фиксации innodb, размеры файлов логов. Стоит ли связываться, если совершенно точно известно, что содержимое временных таблиц не записывается на диск никогда ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2013, 21:20:45 |
|
||
|
Переучивание с MS SQL на MySQL
|
|||
|---|---|---|---|
|
#18+
MasterZiv, Не скажите. Впрочем, разводить холивар и теоретизирование без примеров - не вижу смысла. Мне, всёж-таки, хочется услышать ответ автора, он пишет достаточно сумбурно, но все-таки интересные вещи. Потому что написано им "априори": "... поэтому разработчик..." - то есть утверждается что разработчики MS SQL - тупо вынуждены ТАК поступать. Вот и хотелось увидеть в каких конкретно случаях ПРИХОДИТСЯ так поступать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2013, 05:57:00 |
|
||
|
Переучивание с MS SQL на MySQL
|
|||
|---|---|---|---|
|
#18+
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если совершенно точно известно, что содержимое временных таблиц не записывается на диск никогда ?шоправда? а вот этот параметр тогда зачем? или речь о каких-то других временных таблицах? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2013, 07:44:26 |
|
||
|
Переучивание с MS SQL на MySQL
|
|||
|---|---|---|---|
|
#18+
tanglir, Дык! Вот я и хочу послушать АВТОРА... у меня "завсегда"... мож просто НЕ сталкивался... у вас НЕ завсегда, у Мастера Зива - ваще сферический конь в вакууме... А меня интересует ПОЧЕМУ автор написал так как написал: "поэтому обычно"... как это? То есть на типовых задачах MS SQL - откровенно тупит и пытается реализовать запрос БЕЗ временных табличек (видимо как зависимые) и ему НАДО явно указывать создание временных таблиц?!? , вроде как даже Мускуль - на каждый вложенный во from подзапрос тупо сам создает такую табличку... ещё и в эксплайн пишет derived table ("сам придумал")... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2013, 09:45:28 |
|
||
|
Переучивание с MS SQL на MySQL
|
|||
|---|---|---|---|
|
#18+
tanglirnetwindесли совершенно точно известно, что содержимое временных таблиц не записывается на диск никогда ?шоправда? а вот этот параметр тогда зачем? или речь о каких-то других временных таблицах? правда. при достижении этого параметра временная таблица перестает работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2013, 10:24:36 |
|
||
|
Переучивание с MS SQL на MySQL
|
|||
|---|---|---|---|
|
#18+
netwindправда. при достижении этого параметра временная таблица перестает работать.вот так прямо с ошибкой и вываливается? ссылку на багрепорт можно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2013, 10:29:39 |
|
||
|
Переучивание с MS SQL на MySQL
|
|||
|---|---|---|---|
|
#18+
netwindtanglirпропущено... шоправда? а вот этот параметр тогда зачем? или речь о каких-то других временных таблицах? правда. при достижении этого параметра временная таблица перестает работать. А, нет, это MEMORY перестанет работать. Ну все равно значительно проще этот процесс контролировать нежели использовать таблицы innodb даже внутри одной транзакции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2013, 10:30:44 |
|
||
|
Переучивание с MS SQL на MySQL
|
|||
|---|---|---|---|
|
#18+
netwindНу все равно значительно проще этот процесс контролировать нежели использовать таблицы innodb даже внутри одной транзакции.Ну, "контролировать" можно и подкручивая join_buffer_size. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2013, 11:46:21 |
|
||
|
Переучивание с MS SQL на MySQL
|
|||
|---|---|---|---|
|
#18+
Основной нюанс при переходе от МС СКЛ на МУскл аналогичный - куча мата и перемата, что нету вродебы обыденых вещей, и постоянный вопрос - и какой дебил это придумал, зачем хуже, если уже было решение лучше :) примеры - нету нумератора строк результата выборки про курсоры писали выше нету компиляции кода я както было тоже задавлся мыслями очередное решение для субд сделать не на мс скл а на мускле... но потом сделал на постгри. понял что если мы хотим просто база данных, то мускл рулит если это как дефакто ядро не хилой системы, то мускл разве что как вспомагательный елемент для простых выборок преагрегированных значений. (у меня была статистика работы системы, вот сайт использовал мускл, поэтому в результате весь серверный код наполняющий таблицы статистик писал в постгри, а все агрегированые отчоты, доступные с сайта, брали выборки (фильтр + иногда ещо добавочная агрегация) уже с мускла. так что мой совет. если шариш хорошо в мс скл, и надо другое изза юникса, то сразу смотреть в бесплатную версию постгри. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2013, 13:30:04 |
|
||
|
Переучивание с MS SQL на MySQL
|
|||
|---|---|---|---|
|
#18+
авторМне, всёж-таки, хочется услышать ответ автора, он пишет достаточно сумбурно, но все-таки интересные вещи. Потому что написано им "априори": "... поэтому разработчик..." - то есть утверждается что разработчики MS SQL - тупо вынуждены ТАК поступать. Вот и хотелось увидеть в каких конкретно случаях ПРИХОДИТСЯ так поступать. Да не интересно это всё, товарищь MPRU это всё просто тупо выдумывает. Разработчики на MSSQL НЕ вынуждены так поступать, они вообще никак не вынуждены поступать. Видимо, какой-то один разработчик рассказал MPRU о одном случае, когда применив такую технику удалось что-то ускорить, а он решил, что это -- общее место. НА самом деле, когда-то это полезно для производительности, причём НА ЛЮБОЙ СУБД, когда-то -- вредно. От СУБД это не зависит, зависит исключительно от задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2013, 16:52:08 |
|
||
|
Переучивание с MS SQL на MySQL
|
|||
|---|---|---|---|
|
#18+
MasterZiv, Мне, всё-таки, хочется услышать автора (хотя, если не объявится в ближайшее время, решу что вы правы: пошутил-с), а не наши с Вами "домыслы". В конце-концов, "сумбурность" высказываний можно же преодолеть как-то... вот и поинтересовался конкретикой. Давайте подождем таки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2013, 17:10:25 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38344179&tid=1836375]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 210ms |
| total: | 350ms |

| 0 / 0 |
