我在 A、B 和 C 列上有单独的索引。我想在 A+B+C 三列上创建一个复合索引。
我的现有索引对复合索引创建有什么影响?数据库会利用它们吗?它们是否无关紧要,或者它们会减慢我的新复合索引的创建速度?
我正在使用 MySql 5.1。
编辑:顺便说一句,该表有几百万行。
编辑 2:感谢 tster 的建议:我在一个小得多的表(诚然只有 20,000 行)上进行了尝试,但即便如此,当个别索引已经存在。
最佳答案
MySQL 通常会在您添加索引时重建整个表,因此所有现有的索引也会重建。这可能很慢。
唯一的异常(exception)是使用 InnoDB 插件添加索引,而 InnoDB 插件没有。
据我所知,它在构建索引时总是进行全表扫描,但是如果您添加的索引与另一个索引具有相同(或子集)的列,则它可以进行索引扫描。此类索引通常仅在列的顺序不同时才有用。
使用 stock mysql,您拥有的索引越多,创建新索引的速度就越慢,因为它也会重建现有索引。
有了插件,我觉得没什么区别。
无论哪种方式,如果您计划添加多个索引,您应该一次全部添加,而不是一次添加一个。
关于mysql - 索引创建可以使用已有的索引吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1795189/