Comments 23
Шел 2011 год… В MS SQL Server появились offset… :)
+23
Да, долгожданный функционал. Простой и удобный… наконец-то!
0
Тем не менее синтаксис ужасен. К чему там вот это вот «Rows», как будто там может быть что-то другое.
Даже автор немного запутался и в одном месте написал «Row»
LIMIT [offset,] row_count мне нравится гораздо больше
Даже автор немного запутался и в одном месте написал «Row»
LIMIT [offset,] row_count мне нравится гораздо больше
-5
в оракл такого еще нет :)
знаете какие костыли придумывались, для того чтобы выводить последние 1000 записей?
знаете какие костыли придумывались, для того чтобы выводить последние 1000 записей?
+2
У меня тоже ощущение дежавю.
-1
ну наконец-то они сделали эту простую штуку. Больше не надо извращений с ROW_NUMBER(). Ура!
+1
А вот интересно, если на Denali выполнить скрипт 2 (который для SQL 2005/2008) — будет отличие по CPU time или нет?
Т.е. не является ли уменьшение CPU time следствием улучшения оптимизатора запросов, а не того, что Offset как-то хитро на уровне ядра выполняется?
Т.е. не является ли уменьшение CPU time следствием улучшения оптимизатора запросов, а не того, что Offset как-то хитро на уровне ядра выполняется?
+3
Не понял почему последний запрос вернет именно 10 первых строк…
+1
Хм, вы правы, результат будет обратный Top(10). Недочет мой как переводчика, не проверил. Сделаю ремарку что неправда и надо писать так
что уже как-то смотрится не очень хорошо.
Select
[Person ID]
,[Person Name]
,Age
,DOB
,Address
From dbo.tblSample
Order By Age Desc
Offset 0 Rows Fetch Next 10 Rows Only;
что уже как-то смотрится не очень хорошо.
+1
Мда, ну наконец-то! Осталось теперь заставить админа переставить SQL сервер.
-1
Пример для SQL 2000 с постраничным выбором данных изначально написан не оптимальным образом, именно поэтому он и работает медленнее всех.
Я сталкивался с необходимостью организации постраничного просмотра на SQL 2000 для очень больших таблиц (сотни миллионов строк) — его тоже можно заставить работать очень и очень быстро.
Для этого надо сделать следующее:
1. В таблицу #Temp надо вставлять не весь набор записей, а только первые (@RowSkip+ @RowFetch) записи — остальные там просто не нужны.
Очень помогает уменьшить время.
Правда для этого придется писать генеренный запрос и использовать exec, но это не проблема, если уж пришлось писать для SQL 2000.
2. В #Temp надо вставлять опять же не поля, а только поле [Person ID]. Это будет работать намного быстрее — лишние данные не будут гонятся из таблицы в таблицу.
Затем уже в выборке искомых данных надо добавить join таблиц #Temp и tblSample по полю [Person ID] и вернуть в результате запроса выборку полей из таблицы tblSample.
Я сталкивался с необходимостью организации постраничного просмотра на SQL 2000 для очень больших таблиц (сотни миллионов строк) — его тоже можно заставить работать очень и очень быстро.
Для этого надо сделать следующее:
1. В таблицу #Temp надо вставлять не весь набор записей, а только первые (@RowSkip+ @RowFetch) записи — остальные там просто не нужны.
Очень помогает уменьшить время.
Правда для этого придется писать генеренный запрос и использовать exec, но это не проблема, если уж пришлось писать для SQL 2000.
2. В #Temp надо вставлять опять же не поля, а только поле [Person ID]. Это будет работать намного быстрее — лишние данные не будут гонятся из таблицы в таблицу.
Затем уже в выборке искомых данных надо добавить join таблиц #Temp и tblSample по полю [Person ID] и вернуть в результате запроса выборку полей из таблицы tblSample.
+2
очередь за ораклом
+1
Не понимаю почему не захотели сделать в формате: LIMIT offset, count
Синтаксис хуже не придумаешь =(
Синтаксис хуже не придумаешь =(
+1
Все больше люблю Firebird
+2
Странные костыли, LIMIT гораздо удобнее.
0
Не понимаю чем неудобен where rownum between 100 and 200…
Поясните?
Поясните?
0
Sign up to leave a comment.
MS SQL 2011 – новый оператор Offset