Сначала мы даем несколько основных методов разбиения на страницы и основных операторов, а затем непосредственно даем заключение. Заинтересованные читатели могут взглянуть на следующие данные для нескольких часто используемых методов разбиения на страницы хранимых процедур.
Метод ТопN
выберите Top(@PageSize) из TableName, где ID Not IN
(Выберите верхний идентификатор ((@PageIndex-1)*@PageSize) из имени таблицы, где .... упорядочить по ... )
где....заказать по...
временная таблица
Скопируйте код кода следующим образом:
объявить таблицу @indextable (id intidentity(1,1),nid int,PostUserName nvarchar(50))
объявить @PageLowerBound int
объявить @PageUpperBound int
set @PageLowerBound=(@pageindex-1)*@pagesize — нижний предел
set @PageUpperBound=@PageLowerBound+@pagesize — верхний предел
установить количество строк @PageUpperBound
вставьте в @indextable(nid,PostUserName) выберите ReplyID,PostUserName из TableName, упорядочив их по ......
выберите * из TableName p,@indextable t, где p.ID=t.nid
и t.id>@PageLowerBound и t.id<=@PageUpperBound упорядочиваются по t.id
CTE--2005 новый синтаксис, похожий на временные таблицы, но жизненный цикл немного другой. Вот его применение.
с помощью cte_temp — определите таблицу нулевого времени. PageIndex — это вычисляемое поле, в котором хранится номер страницы результатов поиска.
Как (потолок((Row_Number() over(order by .... )-1)/@pagesize as int) как PageIndex,* из TableName где.....)
выберите * из cte_temp, где pageindex=@pageindex-1;
в заключение:
TopN является самым быстрым, когда количество страниц невелико. Если оно меньше 10, вы можете рассмотреть возможность его использования. Время CTE и временной таблицы очень стабильно, но это не приведет к увеличению производительности. tempdb резко возрастет, а количество операций ввода-вывода увеличится.
Сравнение производительности
Тестовая среда: win2003server, Sqlserver2005, размер библиотеки 2 567 245 строк, нет предложенияwhere, размер страницы 50 во время теста, номер страницы как переменная
Возьмите 0, 3, 10, 31, 100, 316, 1000, 3162... страницы, что соответствует индексу 10. Результаты теста следующие.
Количество страницTopN CTE Временная таблица (с кешем) Временная таблица (без кеша)
Улучшения CTE хранимой процедуры, которые использует компания
1 3 12 10 101 457 7302
3 15 7 79 5524 464 7191
10 127 5504 88 3801 464 6116
32 588 9672 122 3601 976 7602
100 4680 9738 166 4235 486 7151
316 45271 9764 323 3867 522 7255
1000 Нуль 9806 869 2578 635 8948
3162 Ноль 9822 2485 4110 12460 8210
10000 Ноль 9754 7812 11926 14250 7359
31623 Ноль 9775 18729 33218 15249 7511
100000 Нуль Нуль 31538 55569 17139 6124
Интерпретация и анализ данных
Временные таблицы делятся на два типа времени: кэш или нет. CTE — это описанный выше метод. Улучшение CTE только уменьшает количество столбцов, выбранных во временной таблице CTE. Выбраны только номер страницы и первичный ключ. время невозможно вычислить (время слишком велико), единица измерения — миллисекунды.
Из приведенных выше данных мы видим, что TopN имеет преимущества на первых 32 страницах, но по мере увеличения количества страниц производительность быстро снижается. Улучшение CTE лучше, чем CTE, со средним улучшением около двух секунд, но. это все же лучше, чем временная таблица. Медленная, но, учитывая, что временная таблица увеличит размер файла журнала и вызовет много операций ввода-вывода, CTE также имеет свои преимущества. Хранимая процедура, используемая в настоящее время компанией, очень эффективна. но производительность снизится, если номер страницы будет позже.