powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Переучивание с MS SQL на MySQL
20 сообщений из 20, страница 1 из 1
Переучивание с MS SQL на MySQL
    #38337457
MicrosoftProjectRU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно написать 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
Переучивание с MS SQL на MySQL
    #38337461
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторMS SQL не любит очень сложные запросы.
а MS SQL об этом знает?
...
Рейтинг: 0 / 0
Переучивание с MS SQL на MySQL
    #38337550
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так вы как не зададите вопрос, так вечно какой-то холивар. Возьмите, переучитесь. Нам потом расскажите. В бложик напишите.

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


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

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

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

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

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

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

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

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


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

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

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


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


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

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


Какая ? Ну-ка, расскажи...
...
Рейтинг: 0 / 0
Переучивание с MS SQL на MySQL
    #38344234
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Переучивание с MS SQL на MySQL
    #38344370
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109по п.1 - какую-то аргументацию в чиселках привести - можете? А то у меня как-то всё наоборот получается...
как-то завсегда быстрее работало чем вставки в таблички с последующим объединением. Что я делаю "не так"?


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

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

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


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

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

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

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

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

Вот и хотелось увидеть в каких конкретно случаях ПРИХОДИТСЯ так поступать.
...
Рейтинг: 0 / 0
Переучивание с MS SQL на MySQL
    #38344585
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Переучивание с MS SQL на MySQL
    #38344676
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglir,

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

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

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

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

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

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

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

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

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

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

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


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