Как стать автором
Обновить

Комментарии 10

Рекурсия в нем совсем недавно появилась
Спасибо, статья написана 10 лет назад. Это моя проба пера на Habr.
Интересно насколько стало удобнее реализовывать тоже само, е но в mysql 8 с оконными функциями и рекурсивным запросами?
а вы попробуйте
Статья много устаревшая. Я думал будут по существу вопросы и бдения. А мне на почту только и приходит — опечатка, опечатка, опечатка, и тому подобное, грустно.
Просто многим именно MySQL такие выкрутасы не оч нужны, кому нужны — те и так уже знают, т.к. довольно известные ситуации разобрали, впрочем весьма любопытно перечитать это было.
В закладки утащил.
Статья хорошая, 10 лет назад внимательно читал бы примеры. Сейчас же, имхо, «старики» уже давно написали свои реализации, а новичкам есть решения из коробки.
По существу: утверждение «Красивого решения этой задачи одним запросом в MySQL нет.» устарело. LATERAL как раз и реализует, описанный ниже вариант, только в рамках одного запроса.
Вот как эта задача решалась бы в СУБД с поддержкой аналитических функций:

SELECT group_id, order_id, value
FROM(
SELECT *, ROW_NUMBER()OVER(PARTITION BY group_id ORDER BY order_id) RowNum
FROM TestTable
)T
WHERE RowNum <= 2;

Однако оптимизатор MySQL ничего не знает о том, по каким правилам мы вычисляем поле RowNum. Ему придётся пронумеровать ВСЕ строки, и только потом отобрать нужные.

Теперь представьте, что у нас 1 миллион записей и 20 уникальных значений group_id. Т.е. чтобы выбрать 40 строк, MySQL будет вычислять значение RowNum для миллиона строк!

Фраза построена так, что создается впечатление, что только в MySQL будет идти перебор всех строк, а в других СУБД с поддержкой аналитических функций всё ok.
Разве row_number() в других СУБД не будет нумеровать все строки для указанного примера?

Спасибо Вам большое за статью!
Время от времени возвращаюсь, перечитываю и применяю :)

Вы пишете что статья много устаревшая - но пока мне не встречалась более интересная статья на эту тему. Могли бы Вы написать обновленную статью ?

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории