После тестирования при запросе страницы 100000 среди 14483461 записей, по 10 записей на страницу в порядке возрастания и убывания, первый раз составляет 0,47 секунды, а второй раз — 0,43 секунды. Синтаксис теста следующий: Powered by vevb.com.
exec GetRecordFromPage новости,newsid,10,100000
news — это имя таблицы, newsid — ключевое поле, при его использовании сначала индексируйте newsid.
Скопируйте код кода следующим образом:
/*
Имя функции: GetRecordFromPage
Функция: Получить данные указанной страницы.
Описание параметра: @tblName имя таблицы, содержащей данные.
@fldName имя ключевого поля
@PageSize Количество записей на странице
@PageIndex Номер страницы, которую необходимо получить.
@OrderType тип сортировки, 0 — по возрастанию, 1 — по убыванию
Условия запроса @strWhere (примечание: не добавляйте «где»)
Автор: Железный Кулак
Электронная почта: [email protected]
Время создания: 4 июля 2006 г.
Время модификации: 4 июля 2006 г.
*/
СОЗДАТЬ ПРОЦЕДУРУ GetRecordFromPage
@tblName varchar(255), -- имя таблицы
@fldName varchar(255), -- имя поля
@PageSize int = 10, -- размер страницы
@PageIndex int = 1, -- номер страницы
@OrderType bit = 0, -- Устанавливаем тип сортировки, значения, отличные от 0, располагаются в порядке убывания
@strWhere varchar(2000) = '' -- условия запроса (примечание: не добавляйте где)
КАК
объявить @strSQL varchar(6000) — основной оператор
объявить @strTmp varchar(1000) -- временная переменная
объявить @strOrder varchar(500) -- тип сортировки
если @OrderType != 0
начинать
set @strTmp = '<(выберите мин'
set @strOrder = 'упорядочить по [' + @fldName + '] desc'
конец
еще
начинать
set @strTmp = '>(выберите максимум'
set @strOrder = 'упорядочить по [' + @fldName +'] по возрастанию'
конец
set @strSQL = 'выбрать верх' + str(@PageSize) + ' * from ['
+ @tblName + '] где [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'
+ @strOrder
если @strWhere != ''
set @strSQL = 'выбрать верх' + str(@PageSize) + ' * from ['
+ @tblName + '] где [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @fldName + '] from [' + @tblName + '] где ' + @strWhere + ' '
+ @strOrder + ') как tblTmp) и ' + @strWhere + ' ' + @strOrder
если @PageIndex = 1
начинать
установите @strTmp = ''
если @strWhere != ''
set @strTmp = 'где (' + @strWhere + ')'
set @strSQL = 'выбрать верх' + str(@PageSize) + '* from ['
+ @tblName + ']' + @strTmp + ' ' + @strOrder
конец
исполнитель(@strSQL)
ИДТИ