2009-07-01 15 views
6

Quando si esegue l'ottimizzazione delle query, la query SHOW STATUS restituisce valori facilmente comprensibili con un po 'di pratica e spiegazione.Ulteriori informazioni su last_query_cost in MySQL?

Ma last_query_cost è oscuro e scarsamente documentato.

L'unica cosa spiegata è che deve essere letto come un valore anti-macho: più piccolo è il migliore.

Ma abbiamo ulteriori informazioni su questo valore di alto livello? Qual è la sua unità? Come viene calcolato (stimato)? ecc. Come possiamo usarlo per una profilazione avanzata?

Grazie per il prezioso aiuto. :)

risposta

2

Questo ha a che fare con il funzionamento di MySQL Query Optimizer. Quando inserisci ed esegui una query, MySQL costruirà un piano di query. Questo viene fatto valutando come la query può essere eseguita in diversi modi e assegnando "costi" alle diverse possibilità. Questi costi si basano principalmente su statistiche interne e includono dati come il numero di righe nella tabella, la cardinalità di indici diversi e così via. Quando questo è fatto, MySQL sceglie il piano meno costoso ed esegue la query. Il valore last_query_cost è questo valore di costo.

Come avete sicuramente visto nella manual:

Il costo totale degli ultimi compilato interrogazione come calcolato dalla query ottimizzatore. Questo è utile per confrontando il costo di diverse query piani per la stessa query. Il valore predefinito di 0 indica che nessuna query ha ancora stato compilato. Il valore predefinito è 0. Last_query_cost ha lo scope .

Questo è vero. Il valore è utile solo come misura quantitativa per confrontare diverse query.

Ci sono alcune risorse interessanti su Query Optimizer disponibili online, se vuoi saperne di più. Sfortunatamente, non ho nessun link per te facilmente disponibile, ma non dovrebbe essere troppo difficile trovare alcune risorse attraverso una semplice ricerca di "mysql query optimizer".

+0

Esatto! Ho trovato questo link http://tinyurl.com/myw73d. Molto informativo! Ora devo davvero esercitarsi e capire come interpretare questo valore per prendere la decisione giusta quando si ottimizza. ;) Grazie per l'aiuto. :) – Toto

+1

MySQL ad alte prestazioni è un libro eccellente che consiglio vivamente. –

2

This post rende il suono come può essere semplicemente una stima e, pertanto, non qualcosa che si dovrebbe fare affidamento su per il profiling avanzata:

Una cosa che non ha mostrato voi circa quei due interrogazioni era il valore di Last_query_cost. Questo perché ha mostrato il più lento, più alta intensità di dati interrogazione in realtà avere un costo inferiore rispetto al più veloce uno: Ultimo Costo Query nella Tabella Redesign

Variable_name Design1  Design2 
Last_query_cost 20343.599000 71039.632551 

Questo è abbastanza strano, non è vero? I non so come viene calcolato il costo della query ; Credo che l'ottimizzatore calcola in anticipo lo effettivo nell'esecuzione della query. È sicuramente non corrisponde al costo effettivo di che esegue queste query.Di solito è più in linea con il costo reale, ma non sempre. Non dovresti fare affidamento su di esso assolutamente.

+1

Questo è esattamente il tipo di casi che sto cercando di indagare/capire! :) last_query_cost sembra essere più basato sull'ottimizzatore della query che sull'esecuzione. O forse no. Il fatto che non possa giustificare/prevedere questo valore last_query_cost (rispetto a tutte le altre metriche) mi dice solo che mi manca un pezzo. :) – Toto

+0

È strano quanta poca informazione ci sia che descrive questa variabile, specialmente considerando che è uscito con MySQL 5. Forse nessuno l'ha trovato abbastanza accurato. –

+1

Controlla questo link (ho imparato molto): http://tinyurl.com/myw73d :)) – Toto

Problemi correlati