索引创建可以使用现有索引吗?

时间:2009-11-25 07:17:53

标签: mysql indexing

我有个别索引,例如A,B和C列。我想在A + B + C三列上创建一个复合索引。

我的现有索引对复合索引创建有什么影响?数据库是否会利用它们,它们是不相关的,还是会减慢我的新复合索引的创建速度?

我正在使用MySql 5.1。

编辑:BTW该表有几百万行。

编辑2 :感谢tster的建议:我在一个小得多的桌子上尝试了这一点(诚然只有20,000行),但即便如此,新的复合索引的创建时间显着延长了个别指数已经存在。

2 个答案:

答案 0 :(得分:6)

MySQL通常会在添加索引时重建整个表,因此所有现有的表都会重建。这可能很慢。

唯一的例外是使用InnoDB插件添加索引,而不是。

据我所知,它在构建索引时总是进行全表扫描,但是如果你要添加一个与另一个索引具有相同(或子集)列的索引,它可以进行索引扫描。这些索引通常仅在列的顺序不同时才有用。

使用stock mysql,你拥有的索引越多,创建新索引的速度就越慢,因为它也会重建现有的索引。

使用该插件,我认为没有区别。

无论哪种方式,如果您计划添加多个索引,您应该一次一个地进行,而不是一次一个。

答案 1 :(得分:0)

您现有的索引与新索引的创建无关。索引是磁盘上的物理内容,您要求数据库创建一个全新的索引,其结构与现有的三个完全不同。

(警告:我对MySQL没有具体的了解。)

相关问题