Ho 10 milioni di righe nella mia tabella in MySQL e 7 indici su questa tabella. Ora, quando provo ad aggiungere 8, ci vuole del tempo infinito per farlo. C'è un modo per aggirare questo problema per aggiungere facilmente e velocemente l'8 ° indice?Come creare indici più velocemente?
risposta
Questo è uno dei mille modi in cui MySQL fa schifo. In base alla progettazione ...
Dettagli: http://lists.mysql.com/mysql/202489
e non mi importa se perdo karma per questa risposta.
Sì, penso che io stia parlando di –
Sono rimasto scioccato quando ho visto che l'esecuzione di un ALTER TABLE per modificare il valore predefinito - o il nullability - di una colonna, veniva eseguita copiando l'intera tabella e ricreando tutti gli indici. Queste cose richiedono pochissimo tempo su altri DMBS; il modo consigliato di farlo su MySQL per tabelle di grandi dimensioni è stato di andare in giro con il filesystem - cambiando la definizione della tabella con un file di dati vuoto e rimettendo a posto il file di dati completo. –
Il poster di questo articolo è completamente sbagliato. MySQL ricostruisce le tabelle in molti casi quando si esegue ALTER TABLE, ma non ricostruisce mai la tabella più di una volta per istruzione ALTER; inoltre, se lo desideri, puoi fare un numero arbitrario di modifiche con un singolo ALTER. – MarkR
No, il tempo necessario per creare un indice è direttamente proporzionale alla quantità di dati che si hanno. In MS SQL creo degli indici su una tabella con tanti record in circa 10 minuti.
EDIT: Dopo aver visto il commento, si prega di elaborare su infinito. Per definizione, stai dicendo che non finisce mai, la mia risposta è legata a una creazione di indice a lunga corsa e non infinita.
Sì, ci sono voluti 15 minuti –
Allora sei circa buono come si arriva. L'indicizzazione è un'attività molto intensa, specialmente con molti record. –
Quale motore stai utilizzando? L'implementazione di ALTER TABLE ... CREATE INDEX varia in modo significativo.
Utilizzando MyISAM, qualsiasi modifica dell'indice richiede una ricostruzione completa della tabella. Questo non è inerente al motore, ma un bug che non è mai stato risolto.
Utilizzando InnoDB, la creazione di un indice secondario non richiede una ricostruzione della tabella, ma questa ottimizzazione è disponibile solo se si utilizza il plug-in InnoDB (anziché il motore più vecchio, spedito). La modifica della chiave primaria richiede sempre una ricostruzione, perché è in cluster.
La ricostruzione della tabella (in entrambi i casi) richiede molto lavoro in quanto deve ricostruire tutti gli indici esistenti, oltre a riscrivere le righe, per completare l'operazione. Se il tuo tavolo si adatta alla RAM (file da 10 milioni di suoni come dovrebbero fare facilmente), questo è relativamente veloce.
La ricostruzione di un tavolo che non si adatta alla ram è piuttosto costosa, consiglio di evitarla se possibile.
La ricostruzione di un singolo indice che non si adatta alla ram è MOLTO costoso ed è meglio evitare.
Quante volte è necessario aggiungere nuovi indici? Forse puoi popolare le tabelle con l'indice già creato?
- 1. Come eliminare più velocemente?
- 2. Il php funziona più velocemente senza avvertimenti?
- 3. Elenco con più indici
- 4. Come elencare le directory più velocemente?
- 5. Come caricare Android WebView più velocemente?
- 6. Come posso sottrarre questi elenchi più velocemente?
- 7. Come caricare i frammenti più velocemente?
- 8. Come creare indici in MongoDB tramite .NET
- 9. Liquibase creare indici con funzioni
- 10. Come creare velocemente un controllo Datagrid WPF da zero?
- 11. Come inserire i dati il più velocemente possibile con Hibernate
- 12. UPDATE più velocemente in SQLite + BEGIN TRANSACTION
- 13. query più velocemente con l'attributo top
- 14. Compilare più velocemente in Visual Studio 2005
- 15. Doctrine 2 con più indici
- 16. Come rendere l'IDE eclisse per costruire più velocemente
- 17. Come far funzionare un sito web più velocemente?
- 18. Come posso aprire questa cartella di lavoro VBA più velocemente?
- 19. È possibile utilizzare più indici utilizzando HasColumnAnnotation?
- 20. Devo creare indici su chiavi esterne?
- 21. Perché creare un set da un elenco concatenato più velocemente di usare `.update`?
- 22. Quali caratteristiche di Java consentono di creare molto più velocemente di un programma C++ paragonabile?
- 23. Ruby o altre lingue funzioneranno più velocemente con Parrot?
- 24. Come creare indici non cluster in Crea tabella?
- 25. In che modo gli indici Solr e la ricerca funzionano così velocemente?
- 26. multipla Indice della rubrica vs più indici
- 27. Ricampionamento di un DataFrame con più indici
- 28. Unire più dataframes con indici non univoci
- 29. IndexedDB - ObjectStores vs più database vs indici?
- 30. elasticsearch - è possibile interrogare più indici?
Non dovrebbe essere infinito. Si prega di fornire dettagli dello schema e dell'indice della tabella. –
E se ci vuole "per sempre", controlla se sei a corto di spazio su disco da qualche parte - la creazione di indici può richiedere un'enorme quantità di spazio temporaneo. – nos
È un bug di MySQL che ogni indice successivo richiede più tempo. Ho 400 MB reali e 1,6 MB di scambio mem, e non è usato affatto durante la creazione di indice, e ho 20 GB di spazio –