2011-02-08 6 views
9

Quando faccio un spiegare la mia interrogazioneCome liberarsi di "Uso temporanea; Usando FileSort"

enter image description here

vedo che ha "Utilizzo temporaneo; Usando FileSort" sotto "Extra" per la prima fila . Capisco che questo sia male ma non so cosa significhi esattamente o come risolverlo.

Se si desidera visualizzare la mia query, ecco una domanda più generale che ho posto sulla stessa query: MySQL query optimization and EXPLAIN for a noob. Per riferimento, la query riguarda 24 tabelle e 23 join.

Le mie domande ora sono:

  • Cosa "Utilizzo temporaneo" e "Uso FileSort" significa?
  • Supponendo che siano cattivi, come faccio a sbarazzarmene?
+1

Penso che significhi "il Query Optimizer non può utilizzare un indice sulla tabella per recuperare i dati nell'ordine finale, il set di risultati è probabile che sia troppo grande per la memoria, quindi i risultati intermedi verranno archiviati in un file che viene quindi ordinato ". Non è automatico quando il DBMS utilizza file temporanei e li ordina; potrebbe essere il modo migliore per rispondere alla query (l'ottimizzatore pensa che sia). –

+1

Sta usando un filesort perché non ha indice sui campi di ordinamento. Prendi in considerazione l'aggiunta di un indice sui campi obbligatori. Pubblica le tue dichiarazioni di creazione della tabella e la query se vuoi che ti aiutiamo / – Konerak

risposta

7

Come già detto, "l'uso di filesort" e "l'uso di temporanei" non implicano sempre cattive prestazioni.

Here sono alcune linee guida di base per migliorare le prestazioni delle istruzioni ORDER BY. I punti salienti:

Se si desidera aumentare la velocità ORDER BY, controllare se è possibile ottenere MySQL per utilizzare gli indici anziché una fase di ordinamento extra. Se ciò non è possibile, è possibile provare le seguenti strategie:

Aumentare la dimensione della variabile sort_buffer_size .

Aumentare la dimensione della variabile read_rnd_buffer_size.

Utilizzare meno RAM per riga dichiarando colonne grandi quanto devono essere per contenere i valori memorizzati in esse. Ad esempio, CHAR (16) è migliore di CHAR (200) se i valori non superano mai i 16 caratteri.

Primo tentativo di utilizzare indici (assicurarsi che i campi che si stanno ordinando abbiano indici). Notare che l'aumento delle variabili di sistema sort_buffer_size e read_rnd_buffer_size può anche avere un effetto negativo su altre query: prendere in considerazione l'impostazione specifica per la sessione di cui si ha bisogno e lasciarle di default per tutte le altre sessioni.