mysql联合索引最左匹配_mysql 联合索引与最左匹配原则

mysql 中的索引有多种,一般需要优化sql的话也一般是添加或优化联合索引来达到优化的效果。

首先联合索引是什么?

联合索引就是由多个字段列联合组成的一列索引列

添加联合索引的语法和单列索引是一样的。

添加索引

ALTER TABLE TABLE_NAME ADD INDEX idx_name_sex_age(name,sex,age);

建了一个联合索引相当于见了三个索引

(name),(name,sex),(name,sex,age)

mysql联合索引最左匹配_mysql 联合索引与最左匹配原则_第1张图片

情况1 的搜索条件正好在处于idx_name_sex_age 索引上 索引他的key为idx_name_sex_age

EXTRA 为USING INDEX 代表覆盖索引

想搞清楚一个概念,什么叫做覆盖索引。覆盖索引和回表查询是怎么一回事

一般查询的时候,查询的时候的条件和要查询的字段 如果在一个索引上的话可以直接拿索引上的值来

例如我们现在有个单列索引。index_col1

那么我们要查询col1,col2的值 使用col1来做where 条件的话 搜索的时候col1的值是索引列 那么col1的值是可以直接搜索的到。但是col2的值并不在索引上,那么就需要根据col1查询出的主键去表中 查询出col2的值 这样的话虽然走了索引,但是需要再次回表查询无疑速度会慢一些。、

联合索引即可解决这个问题,我们可以建一个包含col1,col2的联合索引 这样的话 我们搜索 col1,col2的值的时候可以直接从索引列上取到值不需要去表中查询

上图中的情况1 就是因为是覆盖索引所以 EXTRA 显示为USING INDEX 一般来说这个sql的性能就到了最高了。

索引的使用和where条件中的列的顺序无关

你可能感兴趣的:(mysql联合索引最左匹配)