美文网首页
mysql索引的最左匹配原则

mysql索引的最左匹配原则

作者: 一个菜鸟JAVA | 来源:发表于2019-12-12 12:31 被阅读0次

试验环境

mysql版本为5.7,存储引擎为InnoDB.

示例

EXPLAIN SELECT * FROM `t_user` WHERE first_name = '陈' AND last_name = '梅';
EXPLAIN SELECT * FROM `t_user` WHERE last_name = '陈' AND first_name = '梅';
EXPLAIN SELECT * FROM `t_user` WHERE last_name = '陈' OR first_name = '梅';
EXPLAIN SELECT * FROM `t_user` WHERE last_name = '陈';

结果如下:

+----+-------------+--------+------------+------+---------------+---------+---------+-------------+------+----------+-------+
| id | select_type | table  | partitions | type | possible_keys | key     | key_len | ref         | rows | filtered | Extra |
+----+-------------+--------+------------+------+---------------+---------+---------+-------------+------+----------+-------+
|  1 | SIMPLE      | t_user | NULL       | ref  | index_1       | index_1 | 2046    | const,const |   66 |      100 | NULL  |
+----+-------------+--------+------------+------+---------------+---------+---------+-------------+------+----------+-------+

+----+-------------+--------+------------+------+---------------+---------+---------+-------------+------+----------+-------+
| id | select_type | table  | partitions | type | possible_keys | key     | key_len | ref         | rows | filtered | Extra |
+----+-------------+--------+------------+------+---------------+---------+---------+-------------+------+----------+-------+
|  1 | SIMPLE      | t_user | NULL       | ref  | index_1       | index_1 | 2046    | const,const |    1 |      100 | NULL  |
+----+-------------+--------+------------+------+---------------+---------+---------+-------------+------+----------+-------+

+----+-------------+--------+------------+------+---------------+------+---------+------+---------+----------+-------------+
| id | select_type | table  | partitions | type | possible_keys | key  | key_len | ref  | rows    | filtered | Extra       |
+----+-------------+--------+------------+------+---------------+------+---------+------+---------+----------+-------------+
|  1 | SIMPLE      | t_user | NULL       | ALL  | index_1       | NULL | NULL    | NULL | 1995967 |       19 | Using where |
+----+-------------+--------+------------+------+---------------+------+---------+------+---------+----------+-------------+

+----+-------------+--------+------------+------+---------------+------+---------+------+---------+----------+-------------+
| id | select_type | table  | partitions | type | possible_keys | key  | key_len | ref  | rows    | filtered | Extra       |
+----+-------------+--------+------------+------+---------------+------+---------+------+---------+----------+-------------+
|  1 | SIMPLE      | t_user | NULL       | ALL  | NULL          | NULL | NULL    | NULL | 1995967 |       10 | Using where |
+----+-------------+--------+------------+------+---------------+------+---------+------+---------+----------+-------------+

结果显示,一二条是符合最左匹配原则的,后面两条则不匹配.在Mysql的官方文档中指出,```如果表拥有一个联合索引,任何一个索引的最左前缀都会被优化器用于查找列.比如,如果你创建了一个三列的联合索引包含(col1, col2, col3),你的索引会生效于(col1),(col1, col2), 以及(col1, col2, col3).
官方文档出处:Multiple-Column Indexes

原理

最左匹配原则是针对联合索引来说的,这点首先要明确.假设创建一个联合索引(a,b),那么它们的结果将如下如所示

B+树索引.png
从图中我们可以看出a的顺序值为(1,1,2,2,3,3),它是按照从小到大的顺序规则排列的,但是b的值并不遵循这个规律.当a的值相同时,可以看见b也是遵循该规律的.这就是为什么mysql多列联合索引需要遵循最左原则的原因了.

相关文章

  • 索引

    这道题目考察的知识点是MySQL组合索引(复合索引)的最左优先原则。 最左前缀匹配原则 在mysql建立联合索引时...

  • 索引优化笔记!

    mysql最左匹配原则如果sql语句中用到了组合索引中的最左边的索引,那么就可以利用这个组合索引去进行匹配 mys...

  • MySQL建索引、查询优化

    索引 最左前缀匹配原则非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)...

  • Mysql语句优化的原则——让你写sql更加顺手

    使用索引的原则: 1.最左前缀匹配原则。 mysql会一直向右匹配直到遇到范围查询(>、<、between、lik...

  • 正常的MySQL索引优化和注意事项

    建索引的几大原则 1.最左前缀匹配原则 mysql会一直向右匹配直到遇到范围查询(>、<、between、like...

  • Mysql建索引的注意事项

    建索引的几大原则 1.最左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>、<、betw...

  • Mysql 索引最左匹配原则

    假设建立这样一个联合索引KEYidx(name, age, postion) USING BTREE 索引的本质是...

  • mysql索引的最左匹配原则

    试验环境 mysql版本为5.7,存储引擎为InnoDB. 示例 结果如下: 结果显示,一二条是符合最左匹配原则的...

  • mysql索引最左匹配原则的理解

    在读 【高性能MySQL(第3版)】在讲到如何正确使用 mysql 索引时,着重提到了一个最左匹配原则。今...

  • innodb联合索引

    1.联合索引遵从最左匹配原则,但是mysql对于条件字段会优化顺序 用到index(class, age)sele...

网友评论

      本文标题:mysql索引的最左匹配原则

      本文链接:https://www.haomeiwen.com/subject/tpzzgctx.html