Erstellen Sie eine Tabelle:
CREATE TABLE [TestTable] (
[ID] [int] IDENTITY (1, 1) NICHT NULL,
[Vorname] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[Nachname] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[Land] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[Anmerkung] [nvarchar] (2000) COLLATE Chinese_PRC_CI_AS NULL
) AUF [PRIMÄR]
GO
Daten einfügen: (20.000 Elemente, Tests mit mehr Daten werden offensichtlicher sein)
SET IDENTITY_INSERT TestTable ON
deklariere @i int
setze @i=1
während @i<=20000
beginnen
in TestTable([id], FirstName, LastName, Country,Note) Werte einfügen(@i, 'FirstName_XXX','LastName_XXX','Country_XXX','Note_XXX')
setze @i=@i+1
end
SET IDENTITY_INSERT TestTable OFF
---------------------------------------
Paging-Lösung eins: (Verwenden Sie Not In und SELECT TOP Paging)
Erklärungsformular:
WÄHLEN SIE DIE TOP 10*
VON TestTable
WO (ID NICHT IN
(WÄHLEN SIE DIE 20 TOP-IDS AUS
VON TestTable
ORDER BY id))
NACH ID BESTELLEN
WÄHLEN SIE DIE TOP-Seitengröße*
VON TestTable
WO (ID NICHT IN
(SELECT TOP-Seitengröße * Seitenzahl-ID
VON Tabelle
ORDER BY id))
ORDER BY ID
---------------------------------------
Paging-Schema zwei: (Verwenden Sie die Summe um wie viel ID ist größer als SELECT TOP Paging)
Erklärungsformular:
WÄHLEN SIE DIE TOP 10*
VON TestTable
WO (ID >
(SELECT MAX(id)
VON (TOP 20 ID AUSWÄHLEN
VON TestTable
ORDER BY id) AS T))
NACH ID BESTELLEN
WÄHLEN SIE DIE TOP-Seitengröße*
VON TestTable
WO (ID >
(SELECT MAX(id)
FROM (SELECT TOP-Seitengröße * Seitenzahl-ID
VON Tabelle
ORDER BY id) AS T))
NACH ID BESTELLEN
---------------------------------------
Paging-Schema drei: (Verwenden Sie das Paging gespeicherter SQL-Cursor-Prozeduren )
Erstellen Sie die Prozedur XiaoZhengGe
@sqlstr nvarchar(4000), --query string
@currentpage int, --Page N
@pagesize int – Anzahl der Zeilen pro Seite
als
nocount einschalten
deklariere @P1 int, --P1 ist die ID des Cursors
@rowcount int
exec sp_cursoropen @P1-Ausgabe,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount-Ausgabe
Wählen Sie die Decke ( 1,0*@rowcount/@pagesize ) als Gesamtzahl der Seiten, @rowcount als Gesamtzahl der Zeilen und @currentpage als aktuelle Seite
setze @currentpage=(@currentpage-1)*@pagesize+1
exec sp_cursorfetch @P1,16,@currentpage,@pagesize
exec sp_cursorclose @P1
Setzen Sie nocount auf
andere Lösungen: Wenn kein Primärschlüssel vorhanden ist, können Sie eine temporäre Tabelle oder Lösung drei verwenden, die Effizienz ist jedoch gering.
Es wird empfohlen, bei der Optimierung das Hinzufügen von Primärschlüsseln und Indizes zur Verbesserung der Abfrageeffizienz zu verwenden.
Über SQL Query Analyzer, Vergleich anzeigen: Meine Schlussfolgerung ist:
Paging-Schema zwei: (Verwendung einer ID größer als was und SELECT TOP zum Paging) Das effizienteste, SQL-Anweisungen müssen gespleißt werden. Paging-Schema eins: (Verwendung von Not In und SELECT TOP zum Paging) Das zweiteffizienteste, SQL-Anweisungen müssen gespleißt werden Paging-Schema 3: (Verwendung des Paging-Schemas von SQL) ist am wenigsten effizient, aber am häufigsten
. In tatsächlichen Situationen ist eine spezifische Analyse erforderlich.