~WR~
Новичок
Посмотрел стандарты и страшно удивился.
http://troels.arvin.dk/db/rdbms/#select-limit
Оказалось, что LIMIT и OFFSET есть только в MySQL и PostgreSQL.
Все остальные СУБД предлагают решать вопрос выборки части результата через window-функции и\или курсоры.
Почему так?
Такое ощущение, что кое-кто принял стандарт в стиле "Стулья должны быть с 2 ножками", и все послушно это схавали. Всех почему-то устраивает.
Аргументы за LIMIT:
1. Синтаксис LIMIT и OFFSET намного короче и яснее.
2. Если не касаться оптимизаций, реализация просто элементарна. Все равно мы уже выбираем все ряды в определенном порядке. Вообще нет проблем вывести только часть из них. Один лишний цикл.
3. Ну и самое главное - составление плана выполнения запроса.
О какой производительности вообще может идти речь, если для того, чтобы вывести 20 жалких рядов из таблицы на 100 миллионов, нам нужно прочитать все ряды и выполнить для каждого window-функцию.
А главное, из LIMIT'а планировщик получает важнейшую информацию: из этого под-запроса ни при каких условиях не вернется больше, чем X рядов. Это же решающая вещь при расчете порядка join'ов.
Видимо, я что-то сильно не понимаю, и есть какие-то серьезные причины.
Но я их в упор не вижу. Как будто людям нравятся трудности на ровном месте.
Может, расскажет кто, в чем тут подвох?
http://troels.arvin.dk/db/rdbms/#select-limit
Оказалось, что LIMIT и OFFSET есть только в MySQL и PostgreSQL.
Все остальные СУБД предлагают решать вопрос выборки части результата через window-функции и\или курсоры.
Почему так?
Такое ощущение, что кое-кто принял стандарт в стиле "Стулья должны быть с 2 ножками", и все послушно это схавали. Всех почему-то устраивает.
Аргументы за LIMIT:
1. Синтаксис LIMIT и OFFSET намного короче и яснее.
2. Если не касаться оптимизаций, реализация просто элементарна. Все равно мы уже выбираем все ряды в определенном порядке. Вообще нет проблем вывести только часть из них. Один лишний цикл.
3. Ну и самое главное - составление плана выполнения запроса.
О какой производительности вообще может идти речь, если для того, чтобы вывести 20 жалких рядов из таблицы на 100 миллионов, нам нужно прочитать все ряды и выполнить для каждого window-функцию.
А главное, из LIMIT'а планировщик получает важнейшую информацию: из этого под-запроса ни при каких условиях не вернется больше, чем X рядов. Это же решающая вещь при расчете порядка join'ов.
Видимо, я что-то сильно не понимаю, и есть какие-то серьезные причины.
Но я их в упор не вижу. Как будто людям нравятся трудности на ровном месте.
Может, расскажет кто, в чем тут подвох?