我有单独的索引,例如列A、B和C。我想在这三列A+B+C上创建一个组合索引。现有的索引会对组合索引的创建产生什么影响?数据库是否会利用它们,它们是否无关紧要,或者它们是否会减慢我的新组合索引的创建速度?我正在使用MySql 5.1。
编辑:顺便说一下,表格有数百万行。
编辑2:感谢tster的建议:我在一个小得多的表格上试过了这个方法(诚然只有20,000行),但即使在这种情况下,如果已经存在单独的索引,则创建新的组合索引也需要花费更长的时间。
MySQL通常在添加索引时会重建整个表,因此所有现有的索引也会被重建。这可能很慢。
唯一的例外是使用InnoDB插件添加索引,它不会这样做。
据我所知,在构建索引时,它总是进行全表扫描,但如果您正在添加一个具有与另一个索引相同(或子集)列的索引,它可以进行索引扫描。这样的索引通常只在列以不同顺序排列时有用。
使用原始的mysql,您拥有的索引越多,创建新索引的速度就会越慢,因为它还会重建现有的索引。
使用插件,我认为不会有什么区别。
无论哪种方式,如果您计划添加多个索引,则应一次性完成而非逐个添加。
您现有的索引与新索引的创建无关。索引是磁盘上的物理实体,您要求数据库创建一个全新的索引,其结构与现有的三个索引完全不同。
(警告:我没有MySQL的具体知识。)