Почему LIMIT и OFFSET нет в SQL-стандарте?

~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'ов.

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

Может, расскажет кто, в чем тут подвох?
 

fixxxer

К.О.
Партнер клуба
limit везде есть в том или ином виде (в mssql - select top, в oracle - where rownum - оно же, в общем-то и offset).

offset вобщем то штука спорная: offset 100500 это не лучший способ

почему нет в стандарте - ну, наверное, потому что мир несовершенен
 

zerkms

TDD infected
Команда форума
В ansi sql 2008 оно появилось. Но другое дело, что даже 92 не поддерживает в полной мере никто :)
 

Ярослав

Новичок
MS SQL 2011 – новый оператор Offset

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

~WR~
Общался с дотнетчиками, они говорят, что этот функционал им не нужен. оО
И вообще у многих проектах, что мне довелось увидить, там просто выборка на top 100. А дальше накладывай дополнительные фильтры, если хочеться данных более подробных.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Курсоры по результсету — это абсолютно нормально. Проблема только в том, что веб-приложения(ладно, скажем прямо, пхп) не умеет для каждого перезапуска (точнее, изза перезапуска) снова пользоваться тем же резульсетом на сервере.

//off: да, я понимаю, что причины этого немного сложнее и разнообразнее, только сути это не меняет. LIMIT появился в угоду веб-приложениям.
 
Сверху