☰
什么情况下索引会失效
2026/10/14 4:27:49 网站建设 项目流程

一、什么叫做索引失效

索引失效,是指查询时因为写法或条件的问题,数据库用不上(或只用上一部分)已有的索引,导致加速能力丧失,退化成全表扫描或逐行过滤。数据照样查得出来,结果也对,只是变慢了。

二、什么情况下会导致索引失效

前置知识:最左列与最右列

最左列:写在联合索引定义里最前面的那一列,就是最左列。

最右列:写在联合索引定义里最后面的那一列,就是最右列。

CREATE INDEX idx ON table_name (a, b, c);

在以上例子中,a就是最左列,c就是最右列

1、违反了最左前缀法则,索引会失效(或部分失效)。如果建立了联合索引,查询就必须从最左列开始、连续地使用,才能让索引充分发挥作用。如果从最左列开始,但中间跳跃了某一列,那么只有跳跃点之前的那些连续列能生效,跳跃点及之后的列都用不上。

CREATE INDEX idx_a_b_c ON table_name (a, b, c);

完全失效:

SELECT * FROM table_name WHERE b = 2;

部分失效:只有a生效

SELECT * FROM table_name WHERE a = 1 AND c = 3;

只有 a 、b生效 c,d用不上

CREATE INDEX idx_a_b_c_d ON table_name (a, b, c, d); SELECT * FROM table_name WHERE a = 1 AND b = 2 AND d = 4;

2、范围查询右边的列,不能用索引快速定位,只能做普通过滤。

如以下例子,范围查询右边的列,也就是 c,没有使用到索引

CREATE INDEX idx_a_b_c ON table_name (a, b, c);
WHERE a = 1 AND b > 2 AND c = 3

3、在索引列上进行运算操作,索引会失效

4、当索引列是字符串类型,而查询时传入的是数字(不加单引号),MySQL 会对索引列做隐式类型转换,导致索引失效。

5、以 % 开头的 Like 模糊查询,索引失效。如果仅仅是尾部模糊匹配,索引不会失效。如果是头部模糊匹配,索引失效

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询