Primero brindamos varios métodos de paginación principales y declaraciones centrales, y luego damos directamente la conclusión. Los lectores interesados pueden consultar los siguientes datos para conocer varios métodos de paginación de procedimientos almacenados de uso común.
método TopN
seleccione Top(@PageSize) de TableName donde ID no está EN
(Seleccione el ID superior ((@PageIndex-1)*@PageSize) del nombre de la tabla donde... ordene por...)
donde.... ordenar por...
mesa temporal
Copie el código de código de la siguiente manera:
declarar tabla @indextable(id int identidad(1,1),nid int,PostUserName nvarchar(50))
declarar @PageLowerBound int
declarar @PageUpperBound int
establecer @PageLowerBound=(@pageindex-1)*@pagesize--límite inferior
establecer @PageUpperBound=@PageLowerBound+@pagesize--límite superior
establecer el número de filas @PageUpperBound
insertar en @indextable(nid,PostUserName) seleccionar ReplyID,PostUserName de TableName ordenar por ......
seleccione * de TableName p,@indextable t donde p.ID=t.nid
y t.id>@PageLowerBound y t.id<=@PageUpperBound orden por t.id
CTE--2005 nueva sintaxis, similar a las tablas temporales, pero el ciclo de vida es ligeramente diferente. Aquí se muestra solo una aplicación.
con cte_temp: define la tabla de tiempo cero. PageIndex es un campo calculado que almacena el número de página de los resultados de la búsqueda.
Como (techo((Row_Number() over(order by.... )-1)/@pagesize as int) como PageIndex,* desde TableName donde.....)
seleccione * de cte_temp donde pageindex=@pageindex-1;
en conclusión:
TopN es el más rápido cuando el número de páginas es pequeño. Si es inferior a 10 páginas, puede considerar usarlo. El CTE y los tiempos de la tabla temporal consumen más tiempo que la tabla temporal. tempdb se disparará y IO aumentará.
Comparación de rendimiento
Entorno de prueba: win2003server, Sqlserver2005, tamaño de biblioteca 2.567.245 filas, sin cláusula Where, tamaño de página 50 durante la prueba, número de página como variable
Tome 0, 3, 10, 31, 100, 316, 1000, 3162... páginas, que es el índice de 10. Los resultados de la prueba son los siguientes
Número de páginasTopN CTE Tabla temporal (con caché) Tabla temporal (sin caché)
Mejoras de CTE de procedimiento almacenado que está utilizando la empresa
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 Nulo 9806 869 2578 635 8948
3162 Nulo 9822 2485 4110 12460 8210
10000 Nulo 9754 7812 11926 14250 7359
31623 Nulo 9775 18729 33218 15249 7511
100000 Nulo Nulo 31538 55569 17139 6124
Interpretación y análisis de datos.
Las tablas temporales se dividen en dos tipos de tiempo: caché o no. La mejora de CTE solo reduce el número de columnas seleccionadas en la tabla temporal de CTE. Solo se seleccionan el número de página y la clave principal. El tiempo no se puede calcular (el tiempo es demasiado largo), la unidad de datos es milisegundos.
De los datos anteriores, podemos ver que TopN tiene ventajas en las primeras 32 páginas, pero a medida que aumenta el número de páginas, el rendimiento disminuye rápidamente. La mejora de CTE es mejor que la de CTE, con una mejora promedio de aproximadamente dos segundos, pero. Sigue siendo mejor que la tabla temporal. Lento, pero teniendo en cuenta que la tabla temporal aumentará el tamaño del archivo de registro y provocará muchas E/S, CTE también tiene sus propias ventajas. El procedimiento almacenado que utiliza actualmente la empresa es muy eficiente. , pero el rendimiento disminuirá cuando el número de página sea posterior.