首先,您的表格定義可能會在這裏產生很大的不同。如果您的列中不需要NULL
值,請將其定義爲NOT NULL
。這將節省索引中的空間,並且在創建索引時大概需要時間。
CREATE TABLE x (
i INTEGER UNSIGNED NOT NULL,
j INTEGER UNSIGNED NOT NULL,
nu DOUBLE NOT NULL,
A DOUBLE NOT NULL
);
至於創建索引所花費的時間,這需要一個表掃描,並會顯示爲REPAIR BY SORTING
。在你的情況下(即海量數據集)應該更快地創建一個具有所需索引的新表並將數據插入到該表中,因爲這樣可以避免操作,因爲索引是按順序在插入上構建的。在this article中有一個類似的概念。
CREATE DATABASE trans_clone;
CREATE TABLE trans_clone.trans LIKE originalDB.trans;
ALTER TABLE trans_clone.trans ADD KEY idx_A (A);
然後腳本插入到數據塊(根據文章),或使用MYSQLDUMP
轉儲數據:
mysqldump originalDB trans --extended-insert --skip-add-drop-table --no-create-db --no-create-info > originalDB .trans.sql
mysql trans_clone < originalDB .trans.sql
這將插入的數據,但不會需要一個索引重建(索引隨着每行插入而建立)並且應該更快地完成。
你可能想看看分裂(數據庫分片)你的表 – 2010-03-20 14:02:03