社区
MySQL
帖子详情
sql语法中,为什么 like ‘%张三’索引会失效
大表哥bettercong
2019-03-03 09:57:12
sql语法中,为什么 like ‘%张三’索引会失效?
表A中字段a上有索引indexa,查询语句使用
select 列 from A where a like '%张三' 时会出现索引失效的情况?
like语法中 like '%张三'索引失效,like '张三%'索引正常?
请问一下原因
...全文
1662
3
打赏
收藏
sql语法中,为什么 like ‘%张三’索引会失效
sql语法中,为什么 like ‘%张三’索引会失效? 表A中字段a上有索引indexa,查询语句使用 select 列 from A where a like '%张三' 时会出现索引失效的情况? like语法中 like '%张三'索引失效,like '张三%'索引正常? 请问一下原因
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ZTzhubajie
2019-03-04
打赏
举报
回复
索引最左原则
AHUA1001
2019-03-04
打赏
举报
回复
索引其实就是排序,或者说排队更直观。
like '张三%',实际你要找的是'张三XXX',只要把所有'张三'开头的那部分内容返回即可,这部分是连续的,不需要全表扫描。
like '%张三',实际你要找的是'XXX张三',这部分在索引里是不连续的,如果要返回需要的结果,只能全表扫描。
桂浮云
2019-03-03
打赏
举报
回复
以MySQL为例,字段a上的索引实际上是B-Tree索引;B-Tree索引可以用于like查询,但要求like后面为一个不能以%开头的常量字符串。 因此,select 列 from A where a like '%张三' 时会出现索引失效的情况。 可以参见官方文档: https://dev.mysql.com/doc/refman/8.0/en/index-btree-hash.html
总结
sql
语句
中
索引
失效
的情况
时隔许久又来更新博客了! 总结一下
sql
优化
中
sql
语句里
会
导致
索引
失效
的语句(
索引
失效
,导致全表扫描) 1、like的前置% eg. select * from user where name like '%
张三
%'; 2、where条件
中
的 or 语句 eg. select * from user where account= 20 or account= 30; 解决办法:使用 union、union all 语句。 select * from user where accoun..
SQL
优化--查询语句
中
,
索引
失效
的几种场景
当优化器估算需扫描超过约25%-30%的数据时,可能放弃
索引
直接全表扫描。若
索引
列是字符串类型,但WHERE条件使用数字比较,
会
触发隐式转换导致
失效
。连接的字段
中
有一个无
索引
,则整个查询可能全表扫描。),可能导致优化器无法预判
索引
效果而选择全表扫描。时,
索引
通常
失效
(主键列可能例外)。在WHERE
中
对
索引
列进行运算(如。在WHERE
中
使用变量或参数(如。条件字段均有独立
索引
才
会
生效。判断时,通常无法利用
索引
。当WHERE条件
中
包含。
中
,若查询未包含最左列。
彻底搞懂
SQL
优化:EXPLAIN、
索引
失效
与性能瓶颈全拆解
索引
不是万能的,写
SQL
时要避免函数、运算、类型转换、错误顺序、模糊匹配等操作,才能让
索引
乖乖发挥作用!优先找出慢
SQL
使用发现当前执行慢的
SQL
;使用慢查询日志定位;配合 APM(如阿里云 DBA助手、腾讯 DBbrain)查看执行耗时最多的
SQL
。“查慢因、看执行、调结构、用
索引
、搞缓存、分冷热、控事务”这几个字基本就是
SQL
优化的大纲思路。不同项目不同瓶颈,优化策略要结合业务和数据特性,逐层深入。
My
SQL
--
索引
失效
索引
失效
就是在查询已经创建了
索引
的字段
中
却没有走
索引
,走的是全表扫描。其实看有没有走
索引
只需要加上 explain,查看 type 为 ALL 就行了。下面的图就是
索引
失效
。下面介绍一下有哪些
会
导致
索引
失效
?like %xx 或者 like %xx%对
索引
列使用函数对
索引
列进行表达式计算发生隐式类型转换不遵守最左匹配原则or。
索引
失效
的几种情况
索引
失效
本文参考尚硅谷视频 口诀:带头大哥不能死,
中
间兄都不能断,
索引
列上无操作,范围右边全
失效
,like百分加右边,字符串
中
有引号 准备: 建立员工记录表staffs(id,name,age,pos,add_time) 给表
中
name,age,pos字段添加
索引
(注意三个字段的顺序) alter table staff add index idx_staffs_nameAgePos(name,age,pos) ①最佳左前缀法则 指的是查询从
索引
的最左前列开始并且不跳过
索引
中
的列 (带头大哥不能死,
中
间
MySQL
57,063
社区成员
56,759
社区内容
发帖
与我相关
我的任务
MySQL
MySQL相关内容讨论专区
复制链接
扫一扫
分享
社区描述
MySQL相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章