2015-05-05 14 views

risposta

28

Questo viene fatto con

ANALYZE TABLE table_name; 

Per saperne di più su di esso here.

ANALYZE TABLE analizza e memorizza la distribuzione delle chiavi per un tavolo. Durante l'analisi, la tabella è bloccata con un blocco di lettura per MyISAM, BDB e InnoDB. Questa dichiarazione funziona con le tabelle MyISAM, BDB, InnoDB e NDB.

+0

Perfetto, questo è esattamente quello che stavo cercando. – qub1n

+2

Per MyISAM, comporta una scansione completa della tabella; potenzialmente lento. Per InnoDB, sono alcune sonde veloci. –

10

Perché? Non è quasi mai necessario aggiornare le statistiche. Ricostruire un indice è ancora più raramente necessario.

OPTIMIZE TABLE tbl; ricostruisce gli indici e fa ANALYZE; richiede tempo.

ANALYZE TABLE tbl; è veloce per InnoDB ricostruire le statistiche. Con 5.6.6 è ancora meno necessario.

+3

Non sono d'accordo con questa risposta. Passando attraverso una vecchia tabella, di circa 300.000 righe, ho aggiornato un paio di colonne in un indice e l'indice conteneva ancora i vecchi valori precedenti all'aggiornamento. Ho lasciato cadere l'indice e l'ho ricreato e poi ha funzionato bene. MySQL 5.7.10 – Adergaard

+1

@Adergaard - Come hai fatto a sapere che l'indice conteneva ancora i vecchi valori? (Questo potrebbe portare a un bug report.) –

+1

Come @Adergaard, anche io non sono d'accordo. Nel mio caso una query che utilizza un indice di fulltext era molto lenta (sembrava che fosse stata utilizzata la ricerca dell'indice completo). Le prestazioni sono migliorate solo dopo aver rilasciato e ricreato l'indice. MySQL 5.6.31. Vorrei che ci fosse un qualche tipo di ricostruzione solo per gli indici, come in Oracle: 'ALTER INDEX ... REBUILD;'. –

1

È anche possibile utilizzare lo strumento CLI fornito mysqlcheck per eseguire le ottimizzazioni. Ha uno ton of switches ma nella sua forma più elementare è sufficiente passare il database, il nome utente e la password.

Aggiungendo questo a cron o all'Utilità di pianificazione di Windows, è possibile impostare come automated process. (MariaDB, ma fondamentalmente la stessa cosa.)