MYSQL et expression LIMIT

  • Auteur de la discussion Auteur de la discussion yann214
  • Date de début Date de début
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 !!!
 
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 ?
 
>> 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
 
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:
 
oui mais bon ca fait 2 requetes ca, c'est pas tres optmisé :) autant qu'il garde sa méthode n°1
 
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)
 
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...
 
yann214, tu ne peux pas faire le test pour savoir lequel est le plsu rapide ? (à ton chrono, top départ :) )
 
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.
 
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:
 
Suffit de faire un UNION

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

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut