Ho esperienza con MS SQL server dove è possibile e utile per update statistic e rebuild indexes. Non riesco a trovare questa opzione in MySQL innoDB, esiste questa opzione? In caso negativo, in che modo il database MySQL crea un piano di esecuzione? MySQL aggiorna gli indici e le statistiche con ogni UPDATE e INSERT?Come posso ricostruire gli indici e aggiornare le statistiche in MySQL innoDB?
risposta
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.
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.
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
@Adergaard - Come hai fatto a sapere che l'indice conteneva ancora i vecchi valori? (Questo potrebbe portare a un bug report.) –
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;'. –
È 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.)
- 1. Riorganizzare e ricostruire automaticamente gli indici
- 2. Scopri le statistiche di utilizzo degli indici MySQL?
- 3. Come posso rinominare tutti gli indici in MySQL
- 4. Indici e l'utilizzo di chiavi primarie come indici in MySQL
- 5. Come abilitare INNODB in mysql
- 6. Come precaricare le tabelle nel pool buffer INNODB con MySQL?
- 7. In che modo MySQL memorizza gli indici?
- 8. mysql: Come liberare spazio (innodb)
- 9. Crea database innodb in mysql
- 10. MySQL - Come ordinare PER RILEVANZA? Tabella INNODB
- 11. MySQL non utilizza gli indici con la clausola WHERE IN?
- 12. MySQL non in avvio, InnoDB non disponibile
- 13. Ottimizzazione InnoDB - "usa le transazioni quando fai gli aggiornamenti" - perché?
- 14. Trova miglior riga corrispondente in MySQL (InnoDB)
- 15. mysql innodb vs inserti myisam
- 16. mysql troppi indici?
- 17. Differenza di prestazioni tra Innodb e Myisam in Mysql
- 18. Innodb e tabelle temporanee
- 19. Gli indici univoci sono migliori per le prestazioni della ricerca di colonne? (PGSQL e MySQL)
- 20. SQL: cosa fanno esattamente le chiavi primarie e gli indici?
- 21. Mysql innoDB continua a bloccarsi
- 22. Ripristino del database InnoDB MySQL
- 23. MySQL InnoDB chiave esterna tra le diverse banche dati
- 24. cambia il motore predefinito mysql in innodb
- 25. MySql, come posso esportare gli indici dal mio database di sviluppo al mio database di produzione?
- 26. sono singole dichiarazioni mysql atomiche in MyISAM e InnoDB?
- 27. Utilizzando "TYPE = InnoDB" in MySQL lancia un'eccezione
- 28. Mysql: inserimento prestazioni INNODB vs MYISAM
- 29. copiare una tabella di MySQL inclusi gli indici
- 30. Controllare gli obiettivi delle statistiche in PostgreSQL
Perfetto, questo è esattamente quello che stavo cercando. – qub1n
Per MyISAM, comporta una scansione completa della tabella; potenzialmente lento. Per InnoDB, sono alcune sonde veloci. –