Nach dem Test beträgt die Abfrage von Seite 100000 unter 14483461 Datensätzen mit 10 Datensätzen pro Seite in aufsteigender und absteigender Reihenfolge beim ersten Mal 0,47 Sekunden und beim zweiten Mal 0,43 Sekunden. Die Testsyntax lautet wie folgt: powered by vevb.com
exec GetRecordFromPage news,newsid,10,100000
news ist der Tabellenname, newsid ist das Schlüsselfeld. Bitte indizieren Sie newsid zuerst, wenn Sie es verwenden.
Kopieren Sie den Codecode wie folgt:
/*
Funktionsname: GetRecordFromPage
Funktion: Rufen Sie die Daten der angegebenen Seite ab
Parameterbeschreibung: @tblName Tabellenname, der Daten enthält
@fldName-Schlüsselfeldname
@PageSize Anzahl der Datensätze pro Seite
@PageIndex Die abzurufende Seitenzahl
Sortiertyp @OrderType, 0 – aufsteigende Reihenfolge, 1 – absteigende Reihenfolge
@strWhere-Abfragebedingungen (Hinweis: Wo nicht hinzufügen)
Autor: Iron Fist
E-Mail: [email protected]
Erstellungszeit: 04.07.2006
Änderungszeitpunkt: 04.07.2006
*/
PROZEDUR „GetRecordFromPage“ ERSTELLEN
@tblName varchar(255), -- Tabellenname
@fldName varchar(255), -- Feldname
@PageSize int = 10, -- Seitengröße
@PageIndex int = 1, -- Seitenzahl
@OrderType Bit = 0, -- Legen Sie den Sortiertyp fest. Werte ungleich 0 werden in absteigender Reihenfolge angezeigt
@strWhere varchar(2000) = '' – Abfragebedingungen (Hinweis: Wo nicht hinzufügen)
ALS
deklarieren Sie @strSQL varchar(6000) – Hauptanweisung
deklarieren Sie @strTmp varchar(1000) – temporäre Variable
deklarieren Sie @strOrder varchar(500) – Sortiertyp
wenn @OrderType != 0
beginnen
set @strTmp = '<(select min'
set @strOrder = ' order by [' + @fldName + '] desc'
Ende
anders
beginnen
set @strTmp = '>(select max'
set @strOrder = ' order by [' + @fldName +'] asc'
Ende
set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + '] wobei [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'
+ @strOrder
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + '] wobei [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '
+ @strOrder + ') als tblTmp) und ' + @strWhere + ' ' + @strOrder
wenn @PageIndex = 1
beginnen
set @strTmp = ''
if @strWhere != ''
set @strTmp = ' where (' + @strWhere + ')'
set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + ']' + @strTmp + ' ' + @strOrder
Ende
exec(@strSQL)
GEHEN