ANALYZE TABLE
Sintassi
ANALYZE [NO_WRITE_TO_BINLOG | LOCAL] TABLE nome_tabella[,nome_tabella...] [PERSISTENT FOR ALL|COLUMNS nome_col [,nome_col ...] INDEXES nome_indice [,nome_indice ...]]
Spiegazione
ANALYZE TABLE
analizza e scrive la distribuzione degli indici di una tabella. Durante l'analisi, se la tabella è MyISAM viene posto un lock. Se è InnoDB viene posto un lock in scrittura. Questa istruzione funziona con MyISAM, Aria e InnoDB. Per le tabelle MyISAM, questo comando equivale a myisamchk --analyze
.
Per ulteriori informazioni su come funziona l'analisi in InnoDB, si veda InnoDB Restrictions
MySQL utilizza la distribuzione degli indici, che viene registrata, per decidere in quale ordine le tabelle debbano essere lette quando si esegue una join su qualcosa che non sia una costante. Inoltre, la distribuzione può essere usata per decidere quali indici utilizzare per una specifica tabella nel risolvere una query.
Questa istruzione richiede i privilegi SELECT e INSERT sulla tabella da analizzare.
Per default, le istruzioni ANALYZE TABLE sono scritte nel log binario e vengono replicate. La parola chiave NO_WRITE_TO_BINLOG
(LOCAL
è un sinonimo) assicura invece che il comando non venga scritto nel log binario.
ANALYZE TABLE
funziona anche sulle tabelle partizionate. E' possibile utilizzare ALTER TABLE ... ANALYZE PARTITION
per analizzare una o più partizioni.
MariaDB starting with 10.0.1
MariaDB 10.0.1 ha esteso ANALYZE TABLE per supportare le statistiche indipendenti dallo storage engine.
La sintassi di ANALYZE TABLE è stata estesa in MariaDB 10.0.1 per permettere di raccogliere le statistiche solo per determinati indici o colonne, utilizzando PERSISTENT FOR
:
ANALYZE TABLE tbl PERSISTENT FOR COLUMNS (col1,col2,...) INDEXES (ind1,ind2,...); -- le liste vuote sono consentite: ANALYZE TABLE tbl PERSISTENT FOR COLUMNS (col1,col2,...) INDEXES (); ANALYZE TABLE tbl PERSISTENT FOR COLUMNS () INDEXES (ind1,ind2,...); -- la seguente istruzione aggiorna solo i campi di mysql.table_stat: ANALYZE TABLE tbl PERSISTENT FOR COLUMNS () INDEXES (); -- quanto segue è sinonimo di 'analyze table': ANALYZE TABLE tbl PERSISTENT FOR ALL;