首先,您的表格定义可能会在这里产生很大的不同。如果您的列中不需要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