Question

C'est une de ces choses qui semblent avoir une courbe étrange où plus j'y pense, plus cela a du sens.Dans une certaine mesure, bien sûr.Et puis, pour moi, cela n'a aucun sens.

Tu veux m'éclairer ?

Était-ce utile?

La solution

Parce que dans la plupart des cas, vous devez d'abord trier vos résultats.Par exemple, lorsque vous effectuez une recherche sur Google, vous ne pouvez afficher que jusqu'à 100 pages de résultats.Ils ne prennent pas la peine de trier par pagerank au-delà de 1 000 sites Web pour un mot clé donné (ou une combinaison de mots clés).

La pagination est rapide.Le tri est lent.

Autres conseils

Lubos a raison, le problème n'est pas le fait que vous faites une pagination (ce qui enlève une ÉNORME quantité de données du réseau), mais que vous devez comprendre ce qui se passe réellement sur la page.

Le fait que vous deviez paginer implique qu'il y a beaucoup de données.Beaucoup de données prennent beaucoup de temps à trier :)

C'est une question vraiment vague.Il faudrait un exemple concret pour avoir une meilleure idée du problème.

Cette question semble assez bien couverte, mais j'ajouterai un petit quelque chose de spécifique à MySQL car cela surprend beaucoup de gens :

Évitez d'utiliser SQL_CALC_FOUND_ROWS.À moins que l'ensemble de données ne soit trivial, compter les correspondances et récupérer un nombre x de correspondances dans deux requêtes distinctes sera beaucoup plus rapide.(Si ça est trivial, vous remarquerez à peine une différence de toute façon.)

Je pensais que tu voulais dire pagination de la page imprimée - c'est là que je me suis fait les dents.J'allais entrer dans un grand monologue sur la collecte de tout le contenu de la page, le positionnement (un grand nombre de règles ici, les moteurs de contraintes sont très utiles) et la justification...mais apparemment, vous parliez du processus d'organisation des informations sur les pages Web.

Pour cela, je suppose que la base de données correspond.L'accès au disque est lent.Une fois que vous l’avez en mémoire, le tri est bon marché.

Bien sûr, le tri sur une requête aléatoire prend un certain temps, mais si vous rencontrez des problèmes avec la même requête paginée utilisée régulièrement, il y a soit un problème avec la configuration de la base de données (indexation incorrecte/aucune, trop peu de mémoire, etc.Je ne suis pas un gestionnaire de base de données) ou vous faites une très mauvaise pagination :

Terriblement faux :par exemple.faire select * from hugetable where somecondition; dans un tableau obtenant le nombre de pages avec array.length, choisissez les index pertinents et jetez le tableau - puis répétez ceci pour chaque page...C'est ce que j'appelle sérieusement faux.

La meilleure solution est deux requêtes :l'un obtient juste le décompte, puis un autre obtient les résultats en utilisant limit et offset.(Certains serveurs SQL propriétaires non standard peuvent avoir une option de requête unique, je ne sais pas)

La mauvaise solution pourrait en fait fonctionner très bien sur de petites tables (en fait, il n'est pas impensable qu'elle soit plus rapide sur de très petites tables, car la surcharge liée à la création de deux requêtes est plus importante que celle d'obtenir toutes les lignes dans une seule requête.je ne le dis pas est donc...) mais dès que la base de données commence à croître, les problèmes deviennent évidents.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top