Cree una tabla:
CREAR TABLA [TestTable] (
[ID] [int] IDENTIDAD (1, 1) NO NULA,
[Nombre] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL,
[Apellido] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL,
[País] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL,
[Nota] [nvarchar] (2000) COLLATE Chinese_PRC_CI_AS NULL
) EN [PRIMARIO]
IR
a insertar datos: (20.000 elementos, las pruebas con más datos serán más obvias)
SET IDENTITY_INSERT TestTable ON
declarar @i int
establecer @i=1
mientras @i<=20000
comenzar
insertar en TestTable([id], Nombre, Apellido, País, Nota) valores(@i, 'Nombre_XXX', 'Apellido_XXX', 'País_XXX', 'Nota_XXX')
establecer @i=@i+1
finalizar
SET IDENTITY_INSERT TestTable OFF
---------------------------------------
Solución de paginación uno: (Usar No en y SELECCIONAR ARRIBA paginación)
Formulario de declaración:
SELECCIONA LOS 10 MEJORES*
DESDE la tabla de pruebas
DÓNDE (ID NO EN
(SELECCIONE LOS 20 MEJORES ids
DESDE la tabla de pruebas
ORDEN POR id))
PEDIR POR IDENTIFICACIÓN
SELECCIONAR tamaño de página SUPERIOR*
DESDE la tabla de pruebas
DÓNDE (ID NO EN
(SELECCIONE el tamaño de la página SUPERIOR * ID del número de página
DE la mesa
ORDEN POR id))
ORDEN POR ID
---------------------------------------
Esquema de paginación dos: (Utilice la suma de cuánto ID es mayor que la paginación SELECT TOP)
Formulario de declaración:
SELECCIONA LOS 10 MEJORES*
DESDE la tabla de pruebas
DONDE (ID >
(SELECCIONAR MÁX.(id)
DE (SELECCIONAR TOP 20 id
DESDE la tabla de pruebas
ORDENAR POR id) COMO T))
PEDIR POR IDENTIFICACIÓN
SELECCIONAR tamaño de página SUPERIOR*
DESDE la tabla de pruebas
DONDE (ID >
(SELECCIONAR MÁX.(id)
DESDE (SELECCIONE el tamaño de la página SUPERIOR * ID del número de página
DE la mesa
ORDENAR POR id) COMO T))
PEDIR POR IDENTIFICACIÓN
---------------------------------------
Esquema de paginación tres: (Usando la paginación del procedimiento almacenado del cursor SQL )
crear procedimiento XiaoZhengGe
@sqlstr nvarchar(4000), --cadena de consulta
@páginaactual int, --Página N
@pagesize int: número de líneas por página
como
establecer no contar en
declarar @P1 int, --P1 es la identificación del cursor
@rowcount int
exec sp_cursoropen @P1 salida,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount salida
seleccione el límite máximo ( 1.0*@rowcount/@pagesize ) como número total de páginas--,@rowcount como número total de filas,@currentpage como página actual
establecer @páginaactual=(@páginaactual-1)*@tamañodepágina+1
ejecutivo sp_cursorfetch @P1,16,@página actual,@tamaño de página
ejecutivo sp_cursorclose @P1
establezca nocount en
otras soluciones: si no hay una clave principal, puede usar una tabla temporal o puede usar la solución tres, pero la eficiencia será baja.
Se recomienda que al optimizar, agregar claves primarias e índices mejore la eficiencia de las consultas.
A través del Analizador de consultas SQL, muestra la comparación: Mi conclusión es:
Esquema de paginación dos: (Usando ID mayor que qué y SELECT TOP para paginación) El más eficiente, necesita unir sentencias SQL Esquema de paginación uno: (Usando Not In y SELECT TOP para paginación) El segundo más eficiente, necesita unir sentencias SQL para Esquema de paginación tres: (Usando el esquema de paginación de SQL) Paginación del procedimiento almacenado del cursor) es el menos eficiente, pero el más común
. En situaciones reales, se requiere un análisis específico.