Mysql
 sql >> Database >  >> RDS >> Mysql

Come ottimizzare le query MySQL in base al piano EXPLAIN

Dipende da cosa stai cercando e qual è la query.

In genere, per ogni riga in EXPLAIN che ha un Using where , devi averlo utilizzando un indice (possible keys e keys colonna). Questi sono i tuoi filtri e includono WHERE e ON. Dicendo Using index è anche meglio. Significa che esiste un indice di copertura e MySQL può recuperare i dati direttamente dall'indice anziché visitare la riga nei dati della tabella.

Le righe dove non c'è Using where , e sta restituendo un numero elevato di righe da esaminare. Questi stanno restituendo valori per tutte le righe della tabella. Non so quale sia la tua domanda, quindi non so se allarmarmi qui. Prova a filtrare il set di risultati per ridurre le dimensioni e migliorare le prestazioni.

In genere dovresti cercare di evitare di vedere Using filesort o Using temporary , anche se sono cattivi solo se non te li aspetti.

Filesort di solito appare con la clausola ORDER. In genere si desidera che MySQL utilizzi un indice di copertura (Using index ) in modo che le righe vengano restituite già in ordine dal server. In caso contrario, MySQL deve ordinarli in seguito, utilizzando filesort.

Using temporary può essere dannoso quando fa riferimento a tabelle derivate perché non hanno indici. Sembra che tu abbia creato esplicitamente una tabella temporanea con indici, quindi qui non è male. A volte, la tua unica scelta è usare una tabella derivata, e quindi Using temporary .