EXPLAIN MySQL: capire query plan

Cos'e EXPLAIN

EXPLAIN e il comando MySQL che mostra il piano di esecuzione di una query: come l'ottimizzatore intende leggere le tabelle, quali indici usera, quante righe stima di esaminare. E lo strumento numero uno per debugging query lente. Sintassi: EXPLAIN SELECT ... oppure EXPLAIN ANALYZE per esecuzione reale (MySQL 8.0+).

Le colonne chiave

id: numero della query/subquery. select_type: SIMPLE, PRIMARY, SUBQUERY, DERIVED. table: tabella oggetto. type: il più importante (vedi sotto). possible_keys: indici candidati. key: indice effettivamente scelto. key_len: lunghezza indice usato. rows: righe stimate scansionate. Extra: info aggiuntive critiche.

La colonna type

Dal migliore al peggiore: system (1 riga), const (PK constant), eq_ref (1 riga per JOIN), ref (poche righe da index), range (range scan), index (full index scan), ALL (full table scan, DISASTRO). Obiettivo: portare ALL a range o ref con indici opportuni.

Colonna Extra critiche

Using index (covering index, ottimo). Using where (filter post-fetch). Using filesort (sort senza index, lento). Using temporary (tabella temp creata, lento). Using join buffer (JOIN senza index, pessimo). Select tables optimized away (great). Vedere Using filesort + Using temporary indica query da rivedere.

Esempio pratico

EXPLAIN SELECT * FROM wp_posts WHERE post_status='publish' AND post_type='product' ORDER BY post_date LIMIT 20. Tipico output: type=ref, key=type_status_date (indice composito esistente in WP), rows=stima. Se vedi type=ALL e rows=100000, manca index. CREATE INDEX idx_status_type_date ON wp_posts(post_status, post_type, post_date) risolve.

EXPLAIN ANALYZE (MySQL 8)

EXPLAIN ANALYZE esegue effettivamente la query e mostra tempo reale per ogni step: actual time vs cost estimate. Identifica step con divergenza grande (estimator inaccurato). Sintassi: EXPLAIN ANALYZE SELECT.... Restituisce tree-format dettagliato. Indispensabile per query complesse con JOIN multipli.

Hai bisogno di aiuto?

Se vuoi un sito veloce ottimizzato dal team di G Tech Group, scrivici tramite il modulo di contatto.

Hai trovato utile quest'articolo?