pagination : méthode la plus performante ? - PHP - Programmation
Marsh Posté le 02-12-2002 à 01:15:15
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.
Marsh Posté le 02-12-2002 à 10:20:02
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 ?
Marsh Posté le 02-12-2002 à 16:49:27
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.
Marsh Posté le 02-12-2002 à 20:10:59
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)
Marsh Posté le 02-12-2002 à 21:46:16
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.
Marsh Posté le 02-12-2002 à 22:00:13
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).
Marsh Posté le 02-12-2002 à 22:07:34
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 ?
Marsh Posté le 02-12-2002 à 22:36:19
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.
Marsh Posté le 02-12-2002 à 22:40:21
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.
Marsh Posté le 02-12-2002 à 01:03:32
A priori je vois 2 types de pagination différents:
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...