Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1531 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  pagination : méthode la plus performante ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

pagination : méthode la plus performante ?

n°258576
siewn
Posté le 02-12-2002 à 01:03:32  profilanswer
 

A priori je vois 2 types de pagination différents:

  • Tu récupères tous les résultats dans ton script php et ne conserve que ceux qui t'intéressent en fonction de la page demandée (en y accédant via un mysql_data_seek par ex). Inconvénient : ça devient lourd quand ta requete retourne qques milliers d'enregistrements.
  • Tu ne récupères que les enregistrements de la page demandée (via un LIMIT dans la requete). Inconvénient : obliger de faire d'abord une requete count (sinon impossible de connaitre le nombre de pages, de résultats).


Actuellement j'utilise la première méthode mais avec mysql4 et le query cache je me disais que la 2e méthode deviendrait peut être plus intéressante (car le count ne serait plus effectué à chaque fois).
 
Bref si avez des avis dessus ou d'autres solutions...

mood
Publicité
Posté le 02-12-2002 à 01:03:32  profilanswer
 

n°258579
gizmo
Posté le 02-12-2002 à 01:15:15  profilanswer
 

Tu aurais du faire la deuxième depuis le début. De toute façon, la query SELECT count(*) FROM table est une requète optimisée DEPUIS mysql 3, elle ne compte pas tous les enregistrements, mais juste un registre.

n°258704
siewn
Posté le 02-12-2002 à 10:20:02  profilanswer
 

mais si je fais un SELECT count(*) FROM mabase WHERE blabla AND blabla AND blabla OR blabla
 
il va bien etre obligé de faire la requete, non ?

n°259072
omega2
Posté le 02-12-2002 à 16:49:27  profilanswer
 

siewn a écrit a écrit :

mais si je fais un SELECT count(*) FROM mabase WHERE blabla AND blabla AND blabla OR blabla
 
il va bien etre obligé de faire la requete, non ?



il va te retourner une valeur et pas plusieurs milliers.
Et côté utilisation CPU, c'est vraiment minime.
Ton "select * from ..." sans LIMIT sera énormément plus lourd même en contant le temps d'exécution du select avec le LIMIT.
En plus, tu gagnes beaucoup de bande passante réseau en fesant comme ça.
Bref, t'as vraiment pas à hésiter.

n°259225
siewn
Posté le 02-12-2002 à 20:10:59  profilanswer
 

si j'hésite car mysql et apache sont sur le meme serveur donc j'ai pas de pb de bp. et honnêtement si je me souviens bien de mes tests, j'obtenais des résultats meilleurs avec la première méthode (logique puisque mysql ne parcourt mes 4000 enregistrements qu'une seule fois)

n°259271
omega2
Posté le 02-12-2002 à 21:46:16  profilanswer
 

siewn a écrit a écrit :

si j'hésite car mysql et apache sont sur le meme serveur donc j'ai pas de pb de bp. et honnêtement si je me souviens bien de mes tests, j'obtenais des résultats meilleurs avec la première méthode (logique puisque mysql ne parcourt mes 4000 enregistrements qu'une seule fois)



C'est quand même bizare, mais bon, après tout, il est possible que certains cas soient étonant.
T'avais mis des index au moins sur ta table par ce que si t'en avait mis, j'en suis tout à fait surpris.

n°259293
siewn
Posté le 02-12-2002 à 22:00:13  profilanswer
 

pas d'index. c'est un autre problème d'ailleurs ça parce que j'ai une requete moyennement complexe et pas moyen de faire un index et qu'il soit utilisé pour la requete (qd je fais un explain, mysql me dit bien qu'il pourrait l'utiliser mais ne l'utilise pas).

n°259304
Mara's dad
Yes I can !
Posté le 02-12-2002 à 22:07:34  profilanswer
 

siewn a écrit a écrit :

si j'hésite car mysql et apache sont sur le meme serveur donc j'ai pas de pb de bp. et honnêtement si je me souviens bien de mes tests, j'obtenais des résultats meilleurs avec la première méthode (logique puisque mysql ne parcourt mes 4000 enregistrements qu'une seule fois)




 
Tu les stockent où tes 4000 enregistrement pour les autres affichages ?


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°259326
omega2
Posté le 02-12-2002 à 22:36:19  profilanswer
 

siewn a écrit a écrit :

pas d'index. c'est un autre problème d'ailleurs ça parce que j'ai une requete moyennement complexe et pas moyen de faire un index et qu'il soit utilisé pour la requete (qd je fais un explain, mysql me dit bien qu'il pourrait l'utiliser mais ne l'utilise pas).



Moi, je sais pas si mysql utilise mes index mais je les crée pour les colones les plus utiliuser au niveau des conditions. Comme ça, si mysql l'utilise, on gagne du temps et sinon, j'aurais fait les chôses proprement.

n°259332
siewn
Posté le 02-12-2002 à 22:40:21  profilanswer
 

Mara's dad a écrit a écrit :

 
 
Tu les stockent où tes 4000 enregistrement pour les autres affichages ?




 
une seule fois par page je voulais dire.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  pagination : méthode la plus performante ?

 

Sujets relatifs
prb pour l'ecriture d'une methode en sql3 :([java] appel d'une méthode de la classe maman
[Hoare] qq à une méthode pour trouver rapidement l'invariant?Erreur de compilation / comment on appelle une methode d'une class?
methode createRange()????Méthode de singleton non appelée
[CSS] Votre méthode pour avoir du code HTML propre ?[PHP] Methode d'authentification?
[JAVA] Méthode pour tester si une variable est initialisée ?Methode pour l'enregistrement et recherche de donnée dans une DB ??
Plus de sujets relatifs à : pagination : méthode la plus performante ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR