MYSQL et expression LIMIT

yann214
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 370
Inscription: 17 Nov 2005

MYSQL et expression LIMIT

Message le Mar Juin 13, 2006 14:03

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 !!!


e-kiwi
Modérateur
Modérateur
 
Messages: 15544
Inscription: 23 Déc 2003

Message le Mar Juin 13, 2006 14:18

solution 2 :)

yann214
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 370
Inscription: 17 Nov 2005

Message le Mar Juin 13, 2006 14:53

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 ?


e-kiwi
Modérateur
Modérateur
 
Messages: 15544
Inscription: 23 Déc 2003

Message le Mar Juin 13, 2006 15:04

>> 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


hipopulation
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 346
Inscription: 28 Juil 2004

Message le Mar Juin 13, 2006 15:21

Une requete avec COUNT pour avoir le total?


david96
WRInaute passionné
WRInaute passionné
 
Messages: 1430
Inscription: 28 Aoû 2005

Message le Mar Juin 13, 2006 15:26

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:


e-kiwi
Modérateur
Modérateur
 
Messages: 15544
Inscription: 23 Déc 2003

Message le Mar Juin 13, 2006 15:30

oui mais bon ca fait 2 requetes ca, c'est pas tres optmisé :) autant qu'il garde sa méthode n°1


Bacteries
WRInaute passionné
WRInaute passionné
 
Messages: 1369
Inscription: 27 Mai 2004

Message le Mar Juin 13, 2006 15:35

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)

yann214
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 370
Inscription: 17 Nov 2005

Message le Mar Juin 13, 2006 15:39

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...


Bacteries
WRInaute passionné
WRInaute passionné
 
Messages: 1369
Inscription: 27 Mai 2004

Message le Mar Juin 13, 2006 15:44

Un count(*) c'est pas lourd.

yann214
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 370
Inscription: 17 Nov 2005

Message le Mar Juin 13, 2006 15:54

même si le SELECT est compliqué ?


e-kiwi
Modérateur
Modérateur
 
Messages: 15544
Inscription: 23 Déc 2003

Message le Mar Juin 13, 2006 16:17

yann214, tu ne peux pas faire le test pour savoir lequel est le plsu rapide ? (à ton chrono, top départ :) )


Bacteries
WRInaute passionné
WRInaute passionné
 
Messages: 1369
Inscription: 27 Mai 2004

Message le Mar Juin 13, 2006 18:58

yann214 a écrit:même si le SELECT est compliqué ?


A mona vis si t'as pas de jointure ça passera sans problème.


lupuz
WRInaute discret
WRInaute discret
 
Messages: 212
Inscription: 15 Mar 2006

Message le Mar Juin 13, 2006 22:21

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.

thierry8
WRInaute accro
WRInaute accro
 
Messages: 3251
Inscription: 11 Juil 2005

Message le Mer Juin 14, 2006 7:08

lupuz a écrit: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.

logique

MYSQL et expression LIMIT

Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: kenzen et 0 invités