2010-10-03 41 views
3

我今天索引了一張包含20億條記錄的巨大表格。我認爲MySQL會吃掉我的2TB硬盤......磁盤消耗不斷增加到400GB,然後增加到500GB,然後最終降到180GB,MySQL說成功添加了索引。爲什麼這個空間會增加,到底發生了什麼?有人能給我一些指點嗎?索引操作到底發生了什麼?

回答

4

順便說一句我昨天回答a question on how to make index creation faster in MySQL了,下面從我的研究就出來了:

CREATE INDEXDROP INDEX命令通過創建具有指定的一組指標的定義一個新的空工作表中。然後,它將現有的行逐一複製到新表中,並在更新索引時進行更新。以這種方式將條目插入到索引中(鍵值未排序)需要對索引節點進行隨機訪問,並且遠非最佳。在複製原始表中的所有行之後,將刪除舊錶,並使用原始表的名稱重命名該副本。

來源:Overview of Fast Index Creation

+0

有一個SQL命令 「SHOW PROCESSLIST;」您可以使用它來監視mysql正在執行的操作以及哪些操作可以確認這一點。 – 2010-10-03 08:23:13

+0

非常有趣...感謝您的洞察力。我的一個問題是我不知道InnoDB支持分區,所以我使用MyISAM。不確定此時將引擎轉換爲InnoDB是否合乎邏輯。 – Legend 2010-10-03 17:58:44