美文网首页
一个例子!教您彻底理解索引的最左匹配原则!

一个例子!教您彻底理解索引的最左匹配原则!

作者: 测试开发Kevin | 来源:发表于2023-11-05 13:28 被阅读0次

最左匹配原则的定义

简单来讲:在联合索引中,只有左边的字段被用到,右边的才能够被使用到。我们在建联合索引的时候,区分度最高的在最左边。

简单的例子

创建一个表

CREATE TABLE `user` (

`id` INT NOT NULL AUTO_INCREMENT,

`code` VARCHAR(20) COLLATE utf8mb4_bin DEFAULT NULL,

`age` INT DEFAULT '0',

`name` VARCHAR(30) COLLATE utf8mb4_bin DEFAULT NULL,

`height` INT DEFAULT '0',

`address` VARCHAR(30) COLLATE utf8mb4_bin DEFAULT NULL,

PRIMARY KEY (`id`),

KEY `idx_code_age_name` (`code`,`age`,`name`),

KEY `idx_height` (`height`)

)

建立联合索引:idx_code_age_name。

该索引字段的顺序是:

code

age

name

然后插入一组数据

INSERT INTO 数据库.`user` (id,CODE,age,NAME,height,address) VALUES(DEFAULT,'1002',40,'kevin',180,'北京市');

以下会走索引

select * from user where code='1002';

select * from user where code='1002' and age=40

select * from user where code='1002' and age=401 and name='kevin';

select * from userwhere code = '1002' and name='kevin';

我们通过 EXPLAIN加上面的任意语句执行

EXPLAIN SELECT * FROM USER WHERE CODE = '1002' AND NAME='kevin';

都会看到 type值 为ref

以下不会走索引

select * from user where age=21;

select * from user where name='Kevin';

select * from user where age=21 and name='Kevin';

我们通过 EXPLAIN加上面的任意语句执行,会看到type值为all

大家可以看到where 从code(从左到右依次是:code、age、name)的联合索引,开始查询就会走索引,如果不从code开始就不会走索引!即只有左边的字段被用到,右边的才能够被使用到

explain 的常用type值

这里先简单的说一下explain,explain即执行计划,使用explain关键字可以模拟优化器执行sql查询语句,从而知道MySQL是如何处理sql语句。explain主要用于分析查询语句或表结构的性能瓶颈。

explain 的常用type值含义如下:

· "ALL"表示全表扫描,没有使用索引。

· "index"表示使用了索引,但不是覆盖索引(即查询中使用了索引,但还需要回表获取数据)。

· "range"表示使用了覆盖索引(即查询中直接从索引中获取了所需数据,无需回表)。

· "ref"表示使用了索引(可能是覆盖索引或非覆盖索引),并使用了一个或多个列进行比较。

· "eq_ref"表示使用了唯一索引,并且只使用了等于操作符进行比较。

我的每一篇文章都希望帮助读者解决实际工作中遇到的问题!如果文章帮到了您,劳烦点赞、收藏、转发!您的鼓励是我不断更新文章最大的动力!

相关文章

  • 索引

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

  • 索引优化笔记!

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

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

    这是你的表结构,有三个字段,分别是id,name,cid 索引方面:id是主键,(name,cid)是一个多列索引...

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

    原文转载 原文因为没有配上explain的结果图片 补充上 创建表 create table test(a int...

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

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

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

    执行1: 执行2: 为什么还能匹配索引? 你的疑问是:sql查询用到索引的条件是必须要遵守最左前缀原则,为什么上面...

  • MySQL建索引、查询优化

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

  • MySQL索引的数据结构

    建立索引的原则 最左前缀匹配原则 尽量选择重复度小的列 索引列不参与计算 尽量扩展索引,不要新建索引 索引的数据结...

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

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

  • mysql索引分类

    常见的索引类型 聚簇索引 非聚簇索引 最左匹配原则 B+树索引 普通索引 唯一索引 主键索引 联合索引 全文索引 ...

网友评论

      本文标题:一个例子!教您彻底理解索引的最左匹配原则!

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