Un algorithme de pagination supérieur de sélection efficace. Le code est le suivant:
<%
'Nombre d'enregistrements par page
pages de faiblesse
PageSize = 30
'Lisez le nombre total d'enregistrements, le nombre total de pages, les notes Piaoyi
TotalRecords DIM, Total Pages
SQLSTR = SELECT COUNT (ID) comme enregistrement dans le tableau 1
SET RS = Conn.execure (SQLSTR, 0,1)
TotalRecords = Rs (enregistrements)
Si int (totalRecords / pagesize) = TotalRecords / PageSize alors
TotalPages = TotalRecords / PageSize
autre
TotalPages = int (TotalRecords / PageSize) +1
terminer si
Rs.Close
Définir RS = rien
«Numéro de page actuel, note Piaoyi
sombre
page = demande (page)
Si isNumeric (page) = false alors
Response.Write <Script Language = JavaScript> alert ('Paramet Error!');
réponse.write window.close (); </cript>
réponse.
terminer si
Si page = ou page <1 alors page = 1
Si Page-TotalPages> 0 alors page = TotalPages
page = int (page)
Si page = 1 alors
SQL = SELECT TOP & PAGESIZE & ID, Titre, temps dans Table1 Order by Time Desc
autre
SQL = Sélectionnez Top & PageSize & Id, Titre, temps dans Table1 Where Time <(Sélectionnez Min (Temps) From (Sélectionnez Top & PageSize * (Page-1) et Time dans Table1 Commandez By Time DESC) AS T) Commandez By Time DESC
terminer si
Set rs = server.createObject (adodb.recordSet)
Rs.Open SQL, Conn, 1,1
Faire tout en pas Rs.Eof
Response.Write chaque information d'enregistrement: & rs (id) & <br>
Rs.MovEnext
boucle
Rs.Close
Définir RS = rien
'' Page Turn Code omis ...
%>
Il s'agit d'un algorithme de pagination très efficace. Lorsque la quantité de données dans le tableau de données atteint des millions, le temps de réponse de l'algorithme de pagination ci-dessus est très court, généralement à quelques dizaines de millisecondes. Le principe est très simple.
Dans les exemples des deux algorithmes de pagination ci-dessus, Flymorn utilise le temps de temps pour commander par tri, car dans la plupart des systèmes avec lesquels je suis entré en contact, nous devons mettre à jour l'utilisateur récemment (y compris les records nouvellement ajoutés et les nouvelles modifications). Le contenu de l'ancien enregistrement (ancien enregistrement) est affiché à l'avant. C'est pourquoi Flymorn utilise le champ Time.
Cela implique la question de l'indexation agrégée. Par défaut, nous utilisons l'ID numéroté automatique comme la clé principale et l'utilisons comme colonne d'index d'agrégation. J'ai mentionné la question que le contenu récemment mis à jour doit être affiché dans le précédent, nous devons donc utiliser le champ Time pour le trier. Par conséquent, afin d'atteindre une efficacité de pagination plus élevée, nous pouvons concevoir ce champ temporel en tant que colonne d'index d'agrégation lors de la conception de la base de données.
Après une telle conception, l'efficacité globale de pagination sera considérablement améliorée.
Cependant, il y a un autre problème mineur avec l'utilisation de ce champ de temps comme colonne d'index d'agrégation. Étant donné que le tableau de données est organisé, il est trié physiquement en fonction de la colonne d'index d'agrégation. La base de données doit être basée sur cette colonne d'index agrégée mentionne également les informations nouvellement modifiées à la fin du tableau, ce qui prend un certain temps. C'est-à-dire que lorsque nous utilisons le champ Time comme colonne d'index d'agrégation, nous devons passer un peu plus de temps lors des données de mise à jour.
Cependant, dans une comparaison complète, Piaoyi estime que la clé de l'algorithme de pagination efficace du top de sélection est d'éviter la numérisation complète de la table et d'essayer d'obtenir uniquement les champs requis. Le temps de réponse de l'instruction SQL triée est le plus rapide. Après ce traitement, pour la base de données SQL Server, même s'il y a des dizaines de millions de données, il n'est pas nécessaire de craindre que l'algorithme de pagination perde sa réponse.
Ce qui précède est un algorithme écrit avec la langue ASP comme exemple, et bien sûr, il peut également être modifié en d'autres langues telles que ASP.NET et PHP. Afin de mieux utiliser un tel code de pagination, vous pouvez également réécrire l'algorithme ci-dessus dans une procédure stockée.
Enfin, laissez une petite question: lors de la sélection de la pagination supérieure, lorsque la page est tournée à la fin, que se passera-t-il si la colonne de champ de tri n'est pas la colonne d'index d'agrégation?