我在MySQL的表中有10mln行,在这个表上有7个索引。现在,当我尝试添加第8个时,这需要无限的时间。有没有办法解决这个问题,以便轻松快速地添加第8个索引?
答案 0 :(得分:5)
不,创建索引所需的时间与您拥有的数据量成正比。在MS SQL中,我在大约10分钟内在表上创建了包含许多记录的索引。
编辑:看到评论后,请详细说明无限。根据定义,你说它永远不会完成,我的答案与长期运行的索引创建有关,而不是无限的。
答案 1 :(得分:2)
答案 2 :(得分:0)
您使用的是哪种引擎? ALTER TABLE ... CREATE INDEX的实现差别很大。
使用MyISAM,任何索引更改都需要完整的表重建。这不是引擎所固有的,而是一个从未修复过的错误。
使用InnoDB,创建辅助索引不需要表重建,但只有在使用InnoDB插件(而不是旧的发运引擎)时才能使用此优化。更改主键始终需要重建,因为它是群集的。
重建表(在任何一种情况下)都需要大量工作,因为它必须重建所有现有索引,以及重写行,以便完成操作。如果你的表适合RAM(10M行听起来应该很容易),这相对较快。
重建不适合ram的桌子相当昂贵,我建议尽可能避免使用。
重建一个不适合ram的单个索引非常昂贵,最好避免使用。
您需要多久添加一次新索引?也许您可以使用已创建的索引填充表格?