Ein effizienter Select Top Paging -Algorithmus. Der Code ist wie folgt:
<%
'Anzahl der Datensätze pro Seite
schwacher pagesizesize
pageSize = 30
'Lesen Sie die Gesamtzahl der Datensätze, die Gesamtzahl der Seiten, stellt Piaoyi fest
DIM -Totalrecords, Gesamtseite
SQLSTR = Wählen Sie Count (ID) als Datensätze aus Tabelle 1
Setzen Sie rs = conn.execute (sqlstr, 0,1)
TotalRecords = Rs (Recordsum)
Wenn int (TotalRecords/PageSize) = TotalRecords/PageSize dann
TotalPages = TotalRecords/PageSize
anders
TotalPages = int (TotalRecords/PageSize) +1
Ende wenn
Rs.close
Setzen Sie Rs = nichts
'Aktuelle Seitennummer, Piaoyi Note
Dim Page
Seite = Anfrage (Seite)
Wenn isnumeric (Seite) = falsch ist
response.write <script Language = javaScript> alert ('Parameterfehler!');
response.write window.close (); </script>
Antwort.end
Ende wenn
Wenn Seite = oder Seite <1, dann Seite = 1
Wenn Seite-Totalpages> 0, dann Seite = Gesamtpagen
Seite = int (Seite)
Wenn Seite = 1 dann
SQL = Top & PageSize & ID, Titel, Zeit aus Tabelle 1 Bestellung nach Zeit Desc Wählen Sie
anders
SQL = Top & PageSize & ID, Titel, Zeit aus Tabelle 1 auswählen, wobei die Zeit <(min (Zeit) aus (Top & PageSize) und Zeit aus Tabelle 1 Bestellung nach Zeit des Desc) als T) Bestellung nach Zeit des Desc
Ende wenn
Setzen Sie rs = server.createObject (adodb.Recordset)
Rs.open SQL, Conn, 1,1
Tun, während nicht Rs.Eof
Antwort. Schreiben Sie jede Datensatzinformationen: & RS (ID) & <br>
Rs.Movenext
Schleife
rs.close
Setzen Sie Rs = nichts
'' Seitenwende -Code weggelassen ...
%>
Dies ist ein sehr effizienter Paging -Algorithmus. Wenn die Datenmenge in der Datentabelle Millionen erreicht, ist die Reaktionszeit des obigen Paging -Algorithmus sehr kurz, normalerweise innerhalb weniger zehn Millisekunden. Das Prinzip ist sehr einfach.
In den Beispielen der beiden oben genannten Paging -Algorithmen verwendet Flymorn die Zeit für die Zeit, die ich in den meisten Systemen ausgesetzt war, die wir kürzlich aktualisieren müssen (einschließlich neuer Datensätze und neuer Änderungen) Der alte Datensatz (alter Datensatz) wird vorne angezeigt. Deshalb verwendet Flymorn das Zeitfeld.
Dies beinhaltet die Frage der aggregierten Indexierung. Standardmäßig verwenden wir die automatische nummerierte ID als Primärschlüssel und verwenden sie als aggregierte Indexspalte. Ich habe die Frage erwähnt, dass der kürzlich aktualisierte Inhalt in der vorherigen angezeigt werden muss. Daher müssen wir das Zeitfeld verwenden, um es zu sortieren. Um eine höhere Paging -Effizienz zu erzielen, können wir dieses Zeitfeld beim Entwerfen der Datenbank als aggregierte Indexspalte entwerfen.
Nach einem solchen Design wird die allgemeine Paging -Effizienz erheblich verbessert.
Es gibt jedoch ein weiteres kleines Problem bei der Verwendung dieses Zeitfelds als aggregierter Indexspalte. Da die Datentabelle angeordnet ist, wird sie nach der Spalte des Aggregats physisch sortiert. Die Datenbank muss auf dieser aggregierten Indexspalte basieren, erwähnt auch die neu bearbeiteten Informationen bis zum Ende der Tabelle, die eine gewisse Zeit in Anspruch nehmen. Das heißt, wenn wir das Zeitfeld als aggregierte Indexspalte verwenden, müssen wir beim Aktualisieren von Daten etwas mehr Zeit verbringen.
In einem umfassenden Vergleich ist Piaoyi jedoch der Ansicht, dass der Schlüssel zu dem effizienten Paging -Algorithmus von Select Top darin besteht, die vollständige Tabelle zu vermeiden und nur die erforderlichen Felder zu erhalten. sind die Reaktionszeit der sortierten SQL -Anweisung die schnellste. Nach dieser Verarbeitung für die SQL -Server -Datenbank müssen sich der Paging -Algorithmus auch dann nicht befürchten, dass der Paging -Algorithmus seine Antwort verliert.
Das obige ist ein Algorithmus, der als Beispiel mit der ASP -Sprache geschrieben wurde, und kann natürlich auch in andere Sprachen wie ASP.NET und PHP geändert werden. Um diesen Paging -Code besser zu verwenden, können Sie den obigen Algorithmus auch in eine gespeicherte Prozedur umschreiben.
Lassen Sie schließlich eine kleine Frage: Wenn Sie Top Paging auswählen, wenn die Seite zum Ende gedreht wird, was passiert, wenn die Spalte für Sortierfeld nicht die Spalte des Aggregats index ist?