【青鸟飞扬教育】MySQL 是如何利用索引的
创始人
2025-06-16 08:54:48

在 MySQL 中进行 SQL 优化的时候,经常会在一些情况下,对 MySQL 能否利用索引有一些迷惑。例如:

MySQL 在遇到范围查询条件的时候就停止匹配了,那么到底是哪些范围条件?

MySQL 在 LIKE 进行模糊匹配的时候又是如何利用索引的呢?

MySQL 到底在怎么样的情况下能够利用索引进行排序?

今天,我将会用一个模型,把这些问题都一一解答,让你对 MySQL 索引的使用机制有进一步的了解。

二、知识补充

key_len

EXPLAIN 执行计划中有一列 key_len 用于表示本次查询中,所选择的索引长度有多少字节,通常我们可借此判断联合索引有多少列被选择了。

在这里 key_len 大小的计算规则是:

一般地,key_len 等于索引列类型字节长度,例如 int 类型为 4 bytes,bigint 为 8 bytes;

如果是字符串类型,还需要同时考虑字符集因素,例如:CHAR (30) UTF8 则 key_len 至少是 90 bytes;

若该列类型定义时允许 NULL,其 key_len 还需要再加 1 bytes;

若该列类型为变长类型,例如 VARCHAR(TEXT\BLOB 不允许整列创建索引,如果创建部分索引也被视为动态列类型),其 key_len 还需要再加 2 bytes;

三、哪些条件能用到索引

首先非常感谢登博,给了我一个很好的启发,我通过他的文章,然后结合自己的理解,制作出了这幅图:

乍一看,是不是很晕,不急,我们慢慢来看图中一共分了三个部分:

Index Key:MySQL 是用来确定扫描的数据范围,实际就是可以利用到的 MySQL 索引部分,体现在 Key Length。

Index Filter:MySQL 用来确定哪些数据是可以用索引去过滤,在启用 ICP 后,可以用上索引的部分。

Table Filter:MySQL 无法用索引过滤,回表取回行数据后,到 server 层进行数据过滤。 我们细细展开。

Index Key

Index Key 是用来确定 MySQL 的扫描范围,分为上边界和下边界。

MySQL 利用 =、>=、> 来确定下边界(first key),利用最左原则,首先判断第一个索引键值在 where 条件中是否存在,如果存在,则判断比较符号,如果为 (=,>=) 中的一种,加入下边界的界定,然后继续判断下一个索引键,如果存在且是 (>),则将该键值加入到下边界的界定,停止匹配下一个索引键;如果不存在,直接停止下边界匹配。

相关内容

热门资讯

最新消息“815比鸡开挂神器下... 您好:815比鸡这款游戏可以开挂,确实是有挂的,需要了解加客服微信【3716361】很多玩家在这款游...
「玩家攻略」“天天乐游.到底是... 您好:天天乐游.这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8383742】很多玩家在这款游...
〖重大通报〗“众汇棋牌有挂吗果... 您好:这款【众汇棋牌】游戏可以开挂,确实是有挂的,需要软件加微信【1184260】,很多玩家在推筒子...
玩家必备分享(潘潘讲故事究竟是... 您好:潘潘讲故事这款游戏是可以开挂的,究竟有没有挂确实能开挂,了解请添加《75638038》(加我们...
曝光内幕“美猴王有挂吗?”(确... 您好:“美猴王这款游戏可以开挂,确实是有挂的,需要软件加微信【63037160】,很多玩家在“美猴王...