Affichage de résultats par pages et Performances

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Affichage de résultats par pages et Performances

par Hubert Roksor » 15 nov. 2007, 18:41

on utilise la fonction mysql_num_rows()
Euh, en fait non, on l'utilise pas :) Je sais que c'est un exemple qu'on voit partout sur les sites de débutants, mais c'est une très mauvaise pratique. Certains conseilleront d'utiliser FOUND_ROWS(), c'est une solution généralement meilleure, même si ce n'est pas systématiquement la meilleure (sur les très gros résultats notamment).

Concernant la pagination, en principe c'est sensé donner de meilleures performances. En pratique, c'est plutôt le contraire car elle est rarement implémentée dans cette optique. Implémenter une pagination réellement performante est généralement bien plus complexe, donc pour beaucoup de gens ça n'en vaut pas vraiment le coup (tout le monde n'a pas des millions d'enregistrements dans ses tables :)).
même avec COUNT cette recherche sur l'ensemble des enregistrements est quand même effectuée
Pas si la requête n'a besoin que des indexes. (autrement dit, pas de "ALL" dans EXPLAIN)

Si tu as un exemple concret on peut en discuter.

Si vous avez besoin de lecture : http://ww.mysqlperformanceblog.com/

par d0m » 15 nov. 2007, 12:38

Le problème c'est que le seul moyen de savoir combien il y a d'enregistrement c'est bel et bien de les compter.

Ou alors tu entretiens un compteur dans ta base où est stocké le nombre d'enregistrement.
Un simple SELECT dessus permettra alors de connaitre le nombre total d'enregistrement de ta table et de pouvoir définir le nombre de lien << 1 2 3 4 ... >>

par dimalta5 » 15 nov. 2007, 12:32

COUNT c'est mieux mais dans le cas d'une requête assez complexe ça reste très couteux en performances d'effectuer une recherche sur l'ensemble des enregistrements.Et même avec COUNT cette recherche sur l'ensemble des enregistrements est quand même effectuée.

tout ça juste pour pouvoir marquer <<Précédent 1 2 3 4 5 6 7 8 9 Suivant>>

ça me choque de faire quelque chose d'aussi lourd juste pour ça...

par Calimero » 15 nov. 2007, 11:43

Bonjour,

Et la fonction COUNT alors ? :-)

Affichage de résultats par pages et Performances

par dimalta5 » 15 nov. 2007, 11:28

Bonjour,

Il y a un problème qui me tracasse depuis quelques jours:

Lorsqu'on affiche les résultats d'une requête sur plusieurs pages je pensais que c'était pour alléger
la requête puisque normalement demander seulement 10 résultats est moins lourd que de tous les demander.

Mais voila où est le problème, quand on présente les résultats sur plusieurs pages, on veut aussi
avoir quelque chose comme ça <<Précédent 1 2 3 4 5 6 7 8 9 Suivant>> pour naviguer entre les pages.

Pour cela on utilise la fonction mysql_num_rows() et cette fonction demande d'exécuter la requête sans mettre LIMIT.

C'est à dire exécuter la requête complète qui retourne tout les résultats... retour à la case départ.

Enfait au final on consomme encore plus de ressources que si on affichait directement tout les résultats sur une seule page.

Pour l'instant je vois pas quelle pourrait être la solution,

Est-ce que quelqu'un aurait une idée?