2009-07-01 3 views
6

Lors de l'optimisation des requêtes, la requête SHOW STATUS renvoie des valeurs faciles à comprendre avec quelques explications pratiques. Mais last_query_cost est obscure et mal documentée.Plus d'informations sur last_query_cost dans MySQL?

La seule chose expliquée est qu'il doit être lu comme une valeur anti-macho: le plus petit sera le mieux.

Mais avons-nous d'autres informations sur cette valeur de haut niveau? Quelle est son unité? Comment est-il calculé (estimé)? etc. Comment pouvons-nous l'utiliser pour un profilage avancé?

Merci pour votre aide précieuse. :)

Répondre

2

Cela a à voir avec le fonctionnement de l'Optimiseur de requêtes MySQL. Lorsque vous entrez et exécutez une requête, MySQL va construire un plan de requête. Ceci est fait en évaluant comment la requête peut être exécutée de différentes manières, et en assignant des "coûts" aux différentes possibilités. Ces coûts sont basés principalement sur des statistiques internes et incluent des données telles que le nombre de lignes dans le tableau, la cardinalité des différents indices et ainsi de suite. Quand cela est fait, MySQL choisit le plan le moins cher et exécute la requête. La valeur last_query_cost est cette valeur de coût.

Comme vous l'avez sans doute vu dans le manual:

Le coût total de la dernière compilation requête calculé par l'optimiseur de requêtes . Ceci est utile pour en comparant le coût de différentes requêtes plans pour la même requête. La valeur par défaut de 0 signifie qu'aucune requête n'a encore été compilée . La valeur par défaut est 0. Last_query_cost a la portée .

Ceci est en effet vrai. La valeur n'est utile que comme mesure quantitative pour comparer différentes requêtes.

Il existe des ressources intéressantes sur l'optimiseur de requête disponible en ligne, si vous voulez en savoir plus. Malheureusement, je n'ai pas de liens pour vous facilement disponibles, mais il ne devrait pas être trop difficile de trouver des ressources grâce à une simple recherche de "mysql query optimizer".

+0

Exact! J'ai trouvé ce lien http://tinyurl.com/myw73d. Très instructif! Maintenant, je dois vraiment pratiquer et comprendre comment interpréter cette valeur pour prendre la bonne décision lors de l'optimisation. ;) Merci de votre aide. :) – Toto

+1

High Performance MySQL est un excellent livre que je recommande fortement. –

2

This post fait sonner comme il peut être simplement une estimation et donc pas quelque chose que vous devez compter sur le profilage avancé:

Une chose que je ne vous montrer sur ces deux requêtes était la valeur de Last_query_cost. C'est parce qu'il a montré le plus lent, plus de données à forte intensité requête fait ayant un moindre coût que le plus véloce: Dernier coût de la requête dans le tableau Remaniement

Variable_name Design1  Design2 
Last_query_cost 20343.599000 71039.632551 

C'est assez bizarre, non? I ne sait pas comment le coût de la requête est calculé; Je crois que l'optimiseur le calcule à l'avance de réellement l'exécution de la requête. Il ne correspond certainement pas au coût réel de l'exécution de ces requêtes.Il est généralement plus en ligne avec le coût réel, mais pas toujours. Vous ne devez pas compter sur elle absolument.

+1

C'est exactement le genre de cas que j'essaie d'étudier/comprendre! :) last_query_cost semble plus basé sur l'optimiseur de requêtes que sur l'exécution. Ou peut être pas. Le fait que je ne puisse pas justifier/prédire cette valeur last_query_cost (par rapport à toutes les autres métriques) me dit seulement que je manque un morceau. :) – Toto

+0

Il est étrange que peu d'informations décrivent cette variable, surtout si l'on considère qu'elle est sortie avec MySQL 5. Peut-être que personne ne l'a trouvé suffisamment précis. –

+1

Cochez ce lien (j'ai beaucoup appris): http://tinyurl.com/myw73d :)) – Toto

Questions connexes