Этот способ чуть быстрее, чем предыдущий, но обладает
тем недостатком, что возвращает не один набор записей, а каждую запись в
отдельном наборе.
Можно так же скомбинировать два последних способа и
позиционировать с помощью курсора, а затем считывать во временную таблицу
нужное количество записей. Получившийся гибрид будет работать довольно быстро, а в некоторых случаях это самый быстрый вариант, и будет наиболее устойчив к
различного рода вольностям в запросе.
Что касается относительной скорости всех методов, то
тут можно смело использовать то, к чему душа больше лежит, разница составляет
не больше нескольких процентов.
Ограничение первой выборки последней записью
отображаемой страницы, позволяет довольно сильно повысить скорость выполнения
запроса, так как в подавляющем большинстве случаев дальше второй-третьей
страницы пользователи не заглядывают. Для очень больших выборок, критичных ко
времени обращения к последним страницам, можно придумать хитрую процедуру, которая умела бы различать начальные и конечные страницы, и к последним
применять обратную сортировку при выборке. Таким образом, к первым и последним
страницам был бы наиболее быстрый доступ.
Oracle
В Оракле проблема постраничного вывода решается
несколько проще. Стандартный способ, подходящий для подавляющего большинства
задач выглядит примерно так:
SELECT * FROM
(SELECT A.*, RowNum R FROM
(SELECT * FROM user_tables
ORDER BY table_name) A
WHERE RowNum < :MaxRecord)
WHERE R >= :MinRecord
Однако при большом желании, так же можно придумать
хитрую процедуру, которая по-разному обрабатывала бы начальные и конечные
станицы большой выборки.
Yukon
В новой версии Microsoft SQL Server специальных
ключевых слов, для подобной функциональности не добавилось, но, тем не менее, постраничную выборку можно немного упростить. В этой версии ключевое слово TOP
стало понимать переменные, и даже запросы, и постраничный вывод можно
организовать примерно так:
SELECT
* FROM
(SELECT
TOP (@PageSize) * FROM
(SELECT TOP (@Page * @PageSize + @PageSize)
* FROM sys.objects
ORDER BY name ASC) SO1
ORDER BY name DESC) SO2
Рекомендуем скачать другие рефераты по теме: скачать доклад на тему, решебник по математике класс виленкин.