Requetes plus rapides..

8 réponses
AuteurMessage

DarkSquall |
Membre

Photo de DarkSquall

Inscrit le : 27/08/2005

# Le 10/08/2006 à 22:26

Hello,

Voilà, j'ai testé 2 manières de faire mes requêtes sur une page style "mini-chat"...
-----------------------------------------
Premier test :
(SELECT message,id_membre,date FROM chat ORDER BY id DESC LIMIT 0,50)

Avec dans le while d'affichage des messages, une fonction qui récupère le pseudo du membre.
(SELECT pseudo from membres where id="$id_membre" LIMIT 0,1)

Résultat : Environ 0,35 seconde. (Calculé sur 20 essais)


Deuxième test :
(SELECT message,id_membre,date,membres.pseudo FROM chat INNER JOIN membres WHERE id_membre=membres.id ORDER BY id DESC LIMIT 0,50)

Résultat : Environ 0,55 seconde. (Calculé sur 20 essais)
-----------------------------------------

Voilà, alors j'aimerais comprendre comment ça se fait que faire 51 requêtes est plus rapide qu'en faire une seule légèrement plus complexe... D'après ce que j'ai pu lire, la 2ième solution aurait du être plus rapide...

Merci!

Isyweb.comOuvrir dans une nouvelle fenetre

Limit | Cyril
Membre

Photo de Limit

Inscrit le : 11/05/2005

# Le 10/08/2006 à 22:28

tu as fais un seul test? déjà désactive le query_cache de mysql et execute la requete quelques milliers de fois pour avoir qqchose de plus clair

Forum GratuitOuvrir dans une nouvelle fenetre - Blog gratuitOuvrir dans une nouvelle fenetre

DarkSquall |
Membre

Photo de DarkSquall

Inscrit le : 27/08/2005

# Le 10/08/2006 à 22:55

Bon, là je viens de réessayer de nombreuses fois dans une page qui ne contient que cette requête en la faisant 20 fois d'affilé avec un for().

Environ 3 secondes pour le 1) et 5secondes pour le 2)...
Donc, toujours les mêmes résultats...

Après j'ai tester les mêmes requêtes avec "SQL_NO_CACHE" en plus.
Résultat, la seconde méthode est très légèrement plus rapide que la première...

Donc le résultat est bien là, même s'il n'est pas aussi satisfaisant que je l'aurais pensé...

Maintenant ce query_cache je le désactive complètement, ou il vaut mieux le laisser?

Encore, merci!

Isyweb.comOuvrir dans une nouvelle fenetre

Julgates | Julien
Administrateur

Photo de Julgates

Inscrit le : 09/03/2005

# Le 11/08/2006 à 08:09

Et au niveau de tes index tu as quoi ?

Shopping Time NetworkOuvrir dans une nouvelle fenetre - Founder / CTO

erwinol | Erwin
Membre

Photo de erwinol

Inscrit le : 09/05/2005

# Le 11/08/2006 à 10:16

DarkSquall a dit :
Maintenant ce query_cache je le désactive complètement, ou il vaut mieux le laisser?


Il vaut mieux le laisser, mais pas pour faire un bench.

As-tu indexé le champ qui te sert à réaliser la jointure ?

flush | Jean-Philippe
Modérateur

Photo de flush

Inscrit le : 09/05/2005

# Le 11/08/2006 à 13:41

Oui surement une histoire de clés ...
Ta bien définit tes clés primaires ainsi que tes indexes sur les champs de jointure ?

@+ Jean-Philippe

DarkSquall |
Membre

Photo de DarkSquall

Inscrit le : 27/08/2005

# Le 11/08/2006 à 18:49

Les clés primaires sont : chat.id et membres.id.
Les indexes sont : chat.id_membre et membres.id...

Isyweb.comOuvrir dans une nouvelle fenetre

Julgates | Julien
Administrateur

Photo de Julgates

Inscrit le : 09/03/2005

# Le 11/08/2006 à 19:07

Tu n'as pas besoin d'index sur membres.id si c'est une primaire

Mais ça ne changera rien à l'efficacité de la requete...

Pourquoi INNER JOIN plutôt que JOIN ?

Shopping Time NetworkOuvrir dans une nouvelle fenetre - Founder / CTO

DarkSquall |
Membre

Photo de DarkSquall

Inscrit le : 27/08/2005

# Le 11/08/2006 à 19:30

Julgates a dit :
Tu n'as pas besoin d'index sur membres.id si c'est une primaire
Mais ça ne changera rien à l'efficacité de la requete...

D'accord, c'est bon à savoir, merci. J'ai donc supprimé l'index de membres.id pour le laisser uniquement en primaire.

Julgates a dit :
Pourquoi INNER JOIN plutôt que JOIN ?

Parce que j'ai appris "INNER JOIN" en premier mais c'est la même chose, non?

Isyweb.comOuvrir dans une nouvelle fenetre

Répondre

Vous ne pouvez pas participer au forum, car votre inscription n'a pas été validée. Pour vous faire valider en tant que Membre, cliquez ici.

© MHN - Tous droits réservés | CNIL N°844440 | 24/11/2024 9:18:44 | Généré en 6.68ms | Contacts | Mentions légales |