Crie uma tabela:
CREATE TABLE [TestTable] (
[ID] [int] IDENTIDADE (1, 1) NÃO NULO,
[Nome] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[Sobrenome] [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
) EM [PRIMÁRIO]
GO
: (20.000 itens, testar com mais dados será mais óbvio)
SET IDENTITY_INSERT TestTable ON
declara @i int
definir @i=1
enquanto @i<=20000
começar
insira em TestTable ([id], Nome, Sobrenome, País, Nota) valores (@i, 'Nome_XXX', 'Sobrenome_XXX', 'País_XXX', 'Nota_XXX')
definir @i=@i+1
final
SET IDENTITY_INSERT TestTable OFF
---------------------------------------
Solução de paginação um: (Use Not In e SELECT TOP paginação)
Formulário de declaração:
SELECIONE OS 10 PRINCIPAIS*
DA tabela de teste
ONDE (ID NÃO ESTÁ
(SELECIONE OS 20 PRINCIPAIS IDs
DA tabela de teste
PEDIR POR id))
PEDIR POR ID
SELECIONE O TAMANHO PRINCIPAL DA PÁGINA*
DA tabela de teste
ONDE (ID NÃO ESTÁ
(SELECIONE o tamanho da página SUPERIOR * ID do número da página
DA tabela
PEDIR POR id))
ORDER BY ID
---------------------------------------
Esquema de paginação dois: (Use a soma de quanto ID é maior que a paginação SELECT TOP)
Formulário de declaração:
SELECIONE OS 10 PRINCIPAIS*
DA tabela de teste
ONDE (ID >
(SELECIONE MAX(id)
DE (SELECIONE OS 20 PRINCIPAIS ID
DA tabela de teste
PEDIR POR id) COMO T))
PEDIR POR ID
SELECIONE O TAMANHO PRINCIPAL DA PÁGINA*
DA tabela de teste
ONDE (ID >
(SELECIONE MAX(id)
FROM (SELECIONE o tamanho da página SUPERIOR * ID do número da página
DA tabela
PEDIR POR id) COMO T))
PEDIDO POR ID
---------------------------------------
Esquema de paginação três: (Usando paginação de procedimento armazenado do cursor SQL )
criar procedimento XiaoZhengGe
@sqlstr nvarchar(4000), --query string
@página atual int, --Página N
@pagesize int --Número de linhas por página
como
ativar nocount
declare @P1 int, --P1 é o id do cursor
@rowcountint
exec sp_cursoropen @P1 saída,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount saída
selecione teto( 1.0*@rowcount/@pagesize ) como o número total de páginas--,@rowcount como o número total de linhas,@currentpage como a página atual
definir @página atual=(@página atual-1)*@pagesize+1
exec sp_cursorfetch @P1,16,@página atual,@pagesize
exec sp_cursorclose @P1
definir nocount
outras soluções: Se não houver chave primária, você pode usar uma tabela temporária ou pode usar a solução três, mas a eficiência será baixa.
Recomenda-se que, ao otimizar, adicionar chaves primárias e índices melhore a eficiência da consulta.
Através do SQL Query Analyzer, exiba a comparação: Minha conclusão é:
Esquema de paginação dois: (Usando ID maior que what e SELECT TOP para paginação) O mais eficiente, precisa unir instruções SQL esquema de paginação um: (Usando Not In e SELECT TOP para paginação) O segundo mais eficiente, precisa unir instruções SQL para esquema de paginação três: (Usando o esquema de paginação do SQL) Paginação de procedimento armazenado por cursor) é o menos eficiente, mas o mais comum
. Em situações reais, é necessária uma análise específica.