联合索引命中规则

发布时间 2023-04-13 12:46:05作者: 人在代码在

MySQL的联合索引是指对多个列共同创建的索引。联合索引是通过多个列的值组合来确定记录的顺序,因此在使用查询语句时,如果涉及到联合索引中的列,则会利用索引的特性进行快速查找,提高查询效率。

以下是创建联合索引的方法:

CREATE INDEX index_name ON table_name (column1, column2, column3);

例如,我们可以在“学生表”中创建一张“学生信息表”并使用联合索引优化查询效率。学生信息表中包含姓名、性别、出生日期、年级和班级等信息,创建的联合索引如下:

CREATE INDEX stu_info_idx ON stu_table (name, gender, grade, class);

这个联合索引可以加速一个同时包含了姓名、年级和班级查询的 SQL 语句。例如:

SELECT * FROM stu_table WHERE name = '张三' AND grade = '2022' AND class = '2班';

当执行此 SQL 语句时,MySQL 会使用stu_table表的stu_info_idx联合索引,快速定位符合查询条件的记录。当表中数据量很大时,这种优化会带来显著的查询性能提升。

 

如果是三个单独索引,那么查询三个索引时只是命中了第一个索引。如果是联合索引则会命中三个。

 

  1. 匹配索引最左边的列:如果查询条件中包含联合索引的最左边的列,则该索引会被命中。

  2. 匹配索引最左边的列和其它列:如果查询条件中包含联合索引中的最左边的列和其它列,则该索引会被命中。

  3. 匹配索引中间的列和其它列:如果查询条件中包含联合索引中的任意中间列和其它列,则该索引不会被命中。

  4. 不匹配索引任何列:如果查询条件中不包含联合索引的任何列,则该索引不会被命中。

  5. 联合索引遵循最左原则:即如果查询条件中只包含联合索引的后面一部分列,而不包含前面的列,则该索引不会被命中。