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

dav*_*vek 3 mysql indexing

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

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

我正在使用MySql 5.1.

编辑:BTW表有几百万行.

编辑2:感谢tster的建议:我在一个小得多的表上尝试了这一点(诚然只有20,000行),但即使如此,当单个索引已经存在时,新复合索引的创建明显更长.

Mar*_*rkR 6

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

唯一的例外是使用InnoDB插件添加索引,但没有.

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

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

有了这个插件,我觉得没什么区别.

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