Créez une table :
CREATE TABLE [TestTable] (
[ID] [int] IDENTITÉ (1, 1) NON NULLe,
[Prénom] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[Nom] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[Pays] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[Note] [nvarchar] (2000) COLLATE Chinese_PRC_CI_AS NULL
) SUR [PRIMAIRE]
GO
insérer des données : (20 000 éléments, tester avec plus de données sera plus évident)
SET IDENTITY_INSERT TestTable ON
déclare @i int
définir @i=1
tandis que @i<=20000
commencer
insérer dans TestTable ([id], FirstName, LastName, Country, Note) les valeurs (@i, 'FirstName_XXX', 'LastName_XXX', 'Country_XXX', 'Note_XXX')
définir @i=@i+1
fin
SET IDENTITY_INSERT TestTable OFF
---------------------------------------
Solution de pagination 1 : (Utilisez Not In et SELECT TOP pagination)
Formulaire de déclaration :
SÉLECTIONNER LE TOP 10*
DE Table de Test
OÙ (ID PAS DANS
(SÉLECTIONNEZ LES 20 TOP identifiants
DE Table de Test
COMMANDER PAR identifiant))
COMMANDE PAR ID
SÉLECTIONNER le format de page TOP*
DE Table de Test
OÙ (ID PAS DANS
(SÉLECTIONNEZ la taille de la page TOP * identifiant du numéro de page
DE la table
COMMANDER PAR identifiant))
ORDER BY ID
---------------------------------------
Schéma de pagination deux : (Utilisez la somme de combien d'ID est supérieur à la pagination SELECT TOP)
Formulaire de déclaration :
SÉLECTIONNER LE TOP 10*
DE Table de Test
OÙ (ID >
(SELECT MAX(id)
DE (SELECT TOP 20 id
DE Table de Test
COMMANDER PAR id) AS T))
COMMANDE PAR ID
SÉLECTIONNER le format de page TOP*
DE Table de Test
OÙ (ID >
(SELECT MAX(id)
FROM (SELECT TOP taille de la page * identifiant du numéro de page
DE la table
COMMANDER PAR id) AS T))
COMMANDE PAR ID
---------------------------------------
Schéma de pagination trois : (Utilisation de la pagination des procédures stockées du curseur SQL )
créer une procédure XiaoZhengGe
@sqlstr nvarchar(4000), --chaîne de requête
@currentpage int, --Page N
@pagesize int --Nombre de lignes par page
comme
ne définir aucun compte sur
déclarer @P1 int, --P1 est l'identifiant du curseur
@rowcount int
exec sp_cursoropen @P1 sortie,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount sortie
sélectionnez le plafond ( 1,0*@rowcount/@pagesize ) comme nombre total de pages--,@rowcount comme nombre total de lignes,@currentpage comme page actuelle
définir @currentpage= (@currentpage-1)*@pagesize+1
exec sp_cursorfetch @P1,16,@currentpage,@pagesize
exec sp_cursorclose @P1
définissez nocount sur
d'autres solutions : s'il n'y a pas de clé primaire, vous pouvez utiliser une table temporaire ou utiliser la solution trois, mais l'efficacité sera faible.
Il est recommandé que lors de l'optimisation, l'ajout de clés primaires et d'index améliore l'efficacité des requêtes.
Grâce à SQL Query Analyzer, affichez la comparaison : ma conclusion est la suivante :
Schéma de pagination deux : (en utilisant un ID supérieur à quoi et SELECT TOP pour la pagination) Le plus efficace, besoin de fusionner les instructions SQL, schéma de pagination un : (en utilisant Not In et SELECT TOP pour la pagination) Le deuxième plus efficace, nécessité de fusionner les instructions SQL pour Schéma de pagination trois : (Utilisation du schéma de pagination de SQL) La pagination de procédure stockée par curseur) est le moins efficace, mais le plus courant
. Dans les situations réelles, une analyse spécifique est requise.