视图使用like失效_SQL高级:SQL 的常见问题-索引失效

定义

可以导致索引失效的情况有 6 种:

    复合索引,跨列。 复合索引,没有全索引匹配。 复合索引,使用 5 种不等于: != <> is null is not null in 在索引上进行函数运算,类型转换。 like 关键字,使用 % 开头 使用 or 关键字

主要危害

索引失效,查询效率低下。

改进方法

SQL 优化是一种概率层面的优化,不会一定有效。使用索引覆盖会肯定有效。

代码实例

实例 1:

目的:演示在复合索引上运算导致索引失效

执行前:

取其中两个顺序索引执行,索引正常利用。

失效运算执行后:

通过 key_len 的长度推断,复合索引只用了其中一个,因此另外一个在运算过程中失效。

索引都执行了运算,全部失效。

复合索引,左边失效,右边全部失效。

实例 2:

目的:演示在单索引上运算导致索引失效

全部失效执行:

左边失效执行后:

剩余单索引依然有效,不受影响。

实例 3:

目的:演示使用几种不等于会导致索引失效

执行前:

增加不等号执行后:

实例 4

目的: 演示 SQL 优化器按概率影响主动优化的情况

执行前:

> 执行后:

实例 4

目的: like 以 % 开头,导致索引失效

执行前:

去掉 % 开头执行后:

必须使用 % 开头的改进办法:索引覆盖

实例 5

目的:演示类型转换导致索引失效

执行前:

隐式执行后:

实例 6

目的:演示使用关键字 or 导致的索引失效

执行前:

执行后:

定义 可以导致索引失效的情况有 6 种: 复合索引,跨列。 复合索引,没有全索引匹配。 复合索引,使用 5 种不等于: != <> is null is not null in 在索引上进行函数运算,类型转换。 like 关键字,使用 % 开头 使用 or 关键字 主要危害 索引失效,查询效率低下。 改进方法 SQL 优化是一种概率层面的优化,不会一定有效。使用索引覆盖会肯定有效。 代码实例 实例 1: 目的:演示在复合索引上运算导致索引失效 执行前: 取其中两个顺序索引执行,索引正常利用。 失效运算执行后: 通过 key_len 的长度推断,复合索引只用了其中一个,因此另外一个在运算过程中失效。 索引都执行了运算,全部失效。 复合索引,左边失效,右边全部失效。 实例 2: 目的:演示在单索引上运算导致索引失效 全部失效执行: 左边失效执行后: 剩余单索引依然有效,不受影响。 实例 3: 目的:演示使用几种不等于会导致索引失效 执行前: 增加不等号执行后: 实例 4 目的: 演示 SQL 优化器按概率影响主动优化的情况 执行前: > 执行后: 实例 4 目的: like 以 % 开头,导致索引失效 执行前: 去掉 % 开头执行后: 必须使用 % 开头的改进办法:索引覆盖 实例 5 目的:演示类型转换导致索引失效 执行前: 隐式执行后: 实例 6 目的:演示使用关键字 or 导致的索引失效 执行前: 执行后:
经验分享 程序员 微信小程序 职场和发展