L'istruzione ANALYZE TABLE
Ultima revisione a cura di Sante Caserio, 30 Gennaio, 2010 09:04
L’istruzione ANALYZE TABLE analizza il contenuto degli indici di una tabella, in particolare aggiorna il dato Cardinality mostrato dall’istruzione SHOW INDEX.
Questo dato è usato per decidere quale indice utilizzare per velocizzare una query e in che ordine eseguire le JOIN fra più tabelle.
ANALYZE TABLE è supportata dagli Storage Engine MyISAM, Maria e dal vecchio BDB in maniera simile e su InnoDB e XtraDB in modo leggermente differente.
Per gli SE MyISAM e Maria esistono anche dei programmi chiamati myisamchk e mariachk.
Su InnoDB e XtraDB risulta molto più rapido nel caso di tabelle con indici di grosse dimensioni, però il risultato è meno accurato perchè il calcolo viene effettuato con otto accessi casuali. E’ comunque possibile aumentare il numero di accessi casuali modificando il valore della variabile innodb_stats_sample_pages.
ANALYZE TABLE crea un LOCK in lettura se eseguito su tabelle di tipo MyISAM, Maria o BDB; in scrittura se eseguito su tabelle InnoDB o XtraDB.
L’istruzione funziona correttamente sulle tabelle partizionate, ma esiste anche la possibilità di analizzare gli indici relativi a una singola partizione con ALTER TABLE … ANALYZE PARTITION.
L’uso di REPAIR TABLE richiede i permessi SELECT e INSERT.
Sintassi
La sintassi è la seguente:
1 ANALYZE [ NO_WRITE_TO_BINLOG ] TABLE nome_tabella
nome_tabella è il nome della tabella che si desidera analizzare; può anche essere un elenco di tabelle separate da virgola, nel qual caso ognuna delle tabelle verrà verificata con una sola istruzione. Esempio:
1 ANALYZE TABLE utenti, permessi;
Le opzioni
Normalmente, quando si esegue REPAIR TABLE, questa istruzione viene scritta nel binlog e replicata sugli eventuali slave. Se non si vuole che ciò avvenga, occorre utilizzare l’opzione NO_WRITE_TO_BINLOG. Lo stesso risultato si può ottenere con il sinonimo LOCAL.
L’output
L’output di ANALYZE TABLE è un recordset simile a quello restituito da altre istruzioni amministrative (OPTIMIZE, CHECK…).
Le colonne restituite sono le seguenti:
- Table è il nome della tabella a cui si riferisce il record; utile quando si specificano più tabelle in una sola istruzione.
- Op è l’operazione eseguita e il valore è sempre analyze.
- Msg_type può avere i seguenti valori: status, info, error, warning; rappresenta il tipo di messaggio.
- Msg_text è un messaggio informativo.
Per ogni tabella coinvolta nella REPAIR TABLE potrebbe essere restituito più di un messaggio.
Se l’ultimo record è di tipo /status/ e il suo valore è /OK/, la tabella è stata analizzata con successo. Se invece è di tipo /status/ ma il valore è /Table already up to date/ la tabella non è stata analizzata perché la distribuzione degli indici non è cambiata dall’ultima analisi. Se non si ottiene un messaggio di questo tipo relativo ad una tabella coinvolta nella ANALYZE TABLE, si è verificato un problema che ha impedito l’operazione.
I messaggi di tipo info, warning ed error (in ordine crescente di gravità) rappresentano problemi riscontrati nella riparazione di una tabella.