Optimisation mysql et LIMIT


xTrade
WRInaute passionné
WRInaute passionné
 
Messages: 2289
Inscription: 11 Déc 2006

Optimisation mysql et LIMIT

Message le Ven Mar 02, 2007 22:22

A l'origine, je veux sélectionner les lignes pour id=1051 à 1251 en ordonnant selon mon champ time

J'ai donc essayer ça : SELECT * FROM stx_visites ORDER BY time desc LIMIT 1051,200

Problème : ça marche pas, cela me retourne n'importe quoi.

En revanche, ceci : SELECT * FROM stx_visites WHERE '1051'<=id AND id<='1251' ORDER BY time desc LIMIT 200
fonctionne parfaitement.

Quel est le plus rapide (id est une clé primaire autoincrémentée) ?

Il y a un truc que j'ai raté dans le limit?

Merci!


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

Message le Ven Mar 02, 2007 22:56

Code: Tout sélectionner
SELECT * FROM stx_visites WHERE id BETWEEN '1051' AND '1251'
ORDER BY time DESC


Pour un segment donnée dans ta base, mieux vaux utiliser BETWEEN, question rendement c'est mieux optimisé que LIMIT.

Voili, voilou ! :)
Dernière édition par david96 le Ven Mar 02, 2007 23:01, édité 1 fois.

Tilt
WRInaute impliqué
WRInaute impliqué
 
Messages: 858
Inscription: 26 Mar 2005

Re: Optimisation mysql et LIMIT

Message le Ven Mar 02, 2007 23:00

xTrade a écrit:A l'origine, je veux sélectionner les lignes pour id=1051 à 1251 en ordonnant selon mon champ time

J'ai donc essayer ça : SELECT * FROM stx_visites ORDER BY time desc LIMIT 1051,200

Problème : ça marche pas, cela me retourne n'importe quoi.

En revanche, ceci : SELECT * FROM stx_visites WHERE '1051'<=id AND id<='1251' ORDER BY time desc LIMIT 200
fonctionne parfaitement.

Quel est le plus rapide (id est une clé primaire autoincrémentée) ?

Il y a un truc que j'ai raté dans le limit?

Merci!


Ta 1ère requête ne fonctionne pas car toute ta table est ordonnée selon ton champ time, et le limit s'applique non pas au champ id mais aux résultats 1051 à 1251 déjà réordonnés selon "time".


f_trt
WRInaute impliqué
WRInaute impliqué
 
Messages: 927
Inscription: 17 Sep 2005

Message le Ven Mar 02, 2007 23:29

De plus LIMIT 1051,200 cela veut dire de la position 1051 a 1251 dans les resultats de ta requete

A+


xTrade
WRInaute passionné
WRInaute passionné
 
Messages: 2289
Inscription: 11 Déc 2006

Re: Optimisation mysql et LIMIT

Message le Ven Mar 02, 2007 23:36

Tilt a écrit:Ta 1ère requête ne fonctionne pas car toute ta table est ordonnée selon ton champ time, et le limit s'applique non pas au champ id mais aux résultats 1051 à 1251 déjà réordonnés selon "time".


Ah, ok, j'aurais pu chercher longtemps!

Quand au BETWEEN, damned, mon bouquin n'en parle même pas 8O

Merci!


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

Re: Optimisation mysql et LIMIT

Message le Ven Mar 02, 2007 23:56

xTrade a écrit:
Quand au BETWEEN, damned, mon bouquin n'en parle même pas 8O

Merci!


Hé bé, c'est une grave omission dit dont ! 8O

Sans déc, la requête que je t'ai faite s'adapte carrément à ta demande, les LIMIT c'est bien, mais pas super optimisé pour ce genre de requête ;-)


xTrade
WRInaute passionné
WRInaute passionné
 
Messages: 2289
Inscription: 11 Déc 2006

Re: Optimisation mysql et LIMIT

Message le Sam Mar 03, 2007 0:11

david96 a écrit:Sans déc, la requête que je t'ai faite s'adapte carrément à ta demande, les LIMIT c'est bien, mais pas super optimisé pour ce genre de requête ;-)


Oui, je viens de l'intégrer à cet endroit et à d'autres!
Cela marche pour tous les types je suppose?


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

Message le Sam Mar 03, 2007 0:17

Pour les types du genre "entre" "et" Comme DATE par exemple ;-)


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: Aucun utilisateur enregistré et 1 invité