mysql - 索引创建可以使用已有的索引吗?

标签 mysql indexing

我在 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/

相关文章:

c++ - DirectX/C++ : Marching Cubes Indexing

mysql - 在mysql中将CHAR转换为日期

Excel:查找所有匹配值并将其放入逗号分隔列表中?

php - Laravel 4 - 将多个值插入数据透视表

javascript - 根据我数据库中的 id 将数据从 html 对象传递到另一个对象

sql - 使用 ORDER BY 和限制 1 优化 PostgreSQL 查询

google-app-engine - 如何在 Google Datastore 中添加复合索引?

mysql - 如何设置 MySQL 索引以获得最佳结果

php - 建立实时数据库(方法)

mysql - DateTimePicker 选择日期之间的记录