MYSQL et expression LIMIT

  • Auteur de la discussion Auteur de la discussion yann214
  • Date de début Date de début
WRInaute occasionnel
Salut,

Est-ce que l'expression LIMIT dans un SELECT permet de gagner en performances ?

Lorsqu'on veut afficher 20 posts d'un forum (à partir du 50e) par exemple, vaut-il mieux faire :

- un "SELECT post_id FROM posts.db WHERE cat_id=2" puis afficher les 20 premiers enregistrements à partir de l'enregistrement 50 ?

- un "SELECTpost_id FROM posts.db WHERE cat_id=2 LIMIT 50,20" et afficher tous les enregistrements ?

Merci !!!
 
WRInaute occasionnel
le problème c'est qu'avec la 2e solution, on n'a pas le nombre d'enregistrements total pour déterminer le nombre de pages qu'on va avoir.

Il va falloir faire une 2e requete pour générer les numéros de pages alors qu'avec la première solution on avait tout...

Compte tenu de cet élément, la 2e solution est-elle toujours la meilleure ?
 
WRInaute accro
>> on n'a pas le nombre d'enregistrements total pour déterminer le nombre de pages qu'on va avoir

c'etait pas précisé :)
faudrait regarder comment fait phpmyadmin, car qd il fait une requete affichant les 30 premiers resultats, il te donne le total. y a ptetre une astuce cachée
 
WRInaute passionné
Lance d'abord t'a requête :
$requete="SELECT bidule_id FROM bidule";
$verification_requete=mysql_query($requete,$taconnexion);
$nombre_total=mysql_num_rows($verification_requete);
echo "total : ".$nombre_total;

Bref dans ta variable $nombre_total, tu as le nombre exacte des enregistrements voulus selon ta requete.

Ensuite avec des if et des elseif tu devrais trouver tout seul ;-)

Y'a surement d'autres solutions, ce n'est pas ce qui manque avec PHP
:lol:
 
WRInaute passionné
Bah tout dépend de la taille de la requête; si ça te renvois 500 enregistrements faire deux requêtes est ptéte pas si mauvais. (à tester cependant)
 
WRInaute occasionnel
ouiap c'est une requette assez lourde, mais la lancer 2 fois c'est 2 fois plus lourd... juste pour les numéros de pages...

Je crois que je suis obligé de passer par la solution 1...
 
WRInaute accro
yann214, tu ne peux pas faire le test pour savoir lequel est le plsu rapide ? (à ton chrono, top départ :) )
 
WRInaute discret
Je confirmes sur une table avec beaucoup d'enregistrement faire un select count(*) et un select ... Limit est bien plus rapide qu'une requete select simple.
 
WRInaute passionné
De plus Mysql encaisse pas mal plusieurs requêtes (suffit de voir l'architecture PHPBB) 8O

Maintenant faut voir du côté hébergeur si tu peux te permettre d'être gourmand en ressource !

Sinon yann214 t'en es où ? Tu nous tiens au courant hein ? :lol:
 
WRInaute impliqué
Suffit de faire un UNION

$q = '
SELECT COUNT(*) AS count FROM table
UNION
SELECT ***la requête compliquée****
 
Discussions similaires
Haut