我在MySQL的表中有10mln行,在這個表上有7個索引。現在,當我嘗試添加8時,需要無限的時間才能完成此操作。有沒有什麼辦法可以解決這個問題,以便輕鬆快速地添加第8個索引?如何快速創建索引?
回答
是的,這是我想說的 – 2010-05-24 21:40:57
當我看到執行ALTER TABLE來更改列的默認值(或可爲空)時,我感到震驚是通過複製整個表並重新創建所有索引來執行的。這些事情在其他DMBS上花費的時間很少;推薦在MySQL上爲大表執行的方式是使用文件系統 - 用空數據文件更改表定義並將完整的數據文件放回原位。 – 2010-05-24 21:49:35
本文的發佈者完全錯誤。在很多情況下,當您執行ALTER TABLE時,MySQL會重建表,但它絕不會在每個ALTER語句中多次重建表;此外,如果需要,您可以使用單個ALTER進行任意數量的修改。 – MarkR 2010-05-24 22:24:13
不,創建索引所需的時間與您擁有的數據量成正比。在MS SQL中,我在大約10分鐘的時間內在一個包含很多記錄的表上創建索引。
編輯:看到評論後,請詳細說明無限。根據定義,你說它永遠不會結束,我的答案與長期運行的索引創建有關,而不是無限的。
是的,花了15分鐘 – 2010-05-24 21:40:41
然後你是一樣好隨着它的到來。索引是一項非常密集的任務,特別是有很多記錄。 – 2010-05-24 21:54:08
您正在使用哪種引擎? ALTER TABLE ... CREATE INDEX的實現變化很大。
使用MyISAM,任何索引更改都需要完整的表重建。這不是固有的引擎,而是一個從未被修復的錯誤。
使用InnoDB,創建二級索引不需要重建表,但只有在使用InnoDB插件(而不是舊的,已發貨的引擎)時才能使用此優化。更改主鍵總是需要重建,因爲它是聚集的。
重建表格(無論是哪種情況)都需要很多工作,因爲它必須重建所有現有索引以及重寫行以完成操作。如果你的桌子適合RAM(10M行聽起來應該很容易),這是相當快的。
重建一個不適合ram的桌子相當昂貴,我建議儘可能避免它。
重建不適合ram的個別索引非常昂貴,最好避免。
您需要多長時間添加新的索引?也許你可以使用已經創建的索引填充表格?
- 1. 創建快速搜索值
- 2. 索引如何使速度更快?
- 3. 關於如何快速索引db
- 4. 快速創建data.frame
- 5. 快速矢量索引
- 6. 如何快速創建新行
- 7. 如何快速用C創建陣列++
- 8. 如何快速創建數百場
- 9. 如何快速創建子查詢
- 10. 如何快速創建大型PDF
- 11. 如何在C#中快速創建TempFile?
- 12. 如何快速創建ip範圍?
- 13. 索引如何幫助在mysql中快速搜索數據
- 14. 快速創建Singelton類?
- 15. 創建快速GUI前端
- 16. 快速創建變量
- 17. php快速創建表格
- 18. 如何加速創建表,索引和存儲過程
- 19. 如何加快用多個表創建空間索引?
- 20. 創建索引
- 21. 與btree索引相比,位圖索引如何加快查詢速度?
- 22. 快速位串生成給定索引
- 23. 索引列但保持插入快速
- 24. 快速索引到數據陣列
- 25. 在numpy中快速高級索引
- 26. 通過ID快速查找索引
- 27. 快速插入和索引的容器?
- 28. 快速拋開索引和postgres
- 29. 調整MySQL以便在開發過程中快速創建列/索引
- 30. 如何從ListBuffer中刪除多個索引(以快速方式)?
它不應該是無限的。請提供您的表格架構和索引的詳細信息。 – 2010-05-24 21:12:56
如果確實需要「永久」,請檢查您的磁盤空間是否用完 - 創建索引可能需要大量的臨時空間。 – nos 2010-05-24 21:27:39
這是每個下一個索引需要更多時間的MySQL的有點bug。我有400 MB的真實和1,6 MB的交換內存,創建索引時根本沒有使用,而且我有20 GB的空間 – 2010-05-24 21:39:03