Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Вот как эта задача решалась бы в СУБД с поддержкой аналитических функций:
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 — Использование переменных в запросе