1.简介

本文主要通过介绍Like索引及常见索引失效情况,以MySQL为例。

2.EXPLAIN关键字

一条查询语句在经过MySQL查询优化器的各种基于成本和规则的优化会后生成一个所谓的执行计划。

EXPLAIN 语句 就可以看到某个查询数据的执行计划,以下是执行计划的各个参数:

语句使用:

EXPLAIN select * from user

3.Like索引失效情况

1. 使用 3%进行查询索引不会失效

explain SELECT * from tb_user where page like ‘3%’


可以看到可以使用的索引是page,实际使用索引page。

2. 使用 %3进行查询索引会失效

explain SELECT * from tb_user where page like ‘%3’


使用%3查询走的是全表扫描,并没有用到page索引。

解决办法
1.创建倒叙索引,reverse()

reverse()应用场景,比如你根据身份证查询一个市洲的人员信息。众所周知,同一个市洲大部分人员身份证前6位是相同的,比如黄石,前六位420222。这个时候你就可以通过reverse()字段,创建身份证后6位的前缀索引进行查询。

CREATE INDEX pagereverse ON tb_user (reverse(page ));

2.修改SQL语句

select page from tb_user where reverse(page ) like reverse(‘%3’);


没有进行全表扫描,使用并走了pagereverse 索引

3. 使用%3% 进行查询索引会失效

1. like concat(‘%’, ‘3’, ‘%’)

explain SELECT * from tb_user where page like concat(‘%’, ‘3’, ‘%’)

索引失效,未走索引

50w数据查询,耗时0.410s

2.使用LOCATE函数

explain SELECT * from tb_user where LOCATE(‘3’, page)>0

索引失效,未走索引
50w数据查询,耗时0.403s

3.使用POSITION函数

explain SELECT * from tb_user where POSITION(‘3’ in page)>0

索引失效,未走索引

50w数据查询,耗时0.406s

4.使用INSTR函数

explain SELECT * from tb_user where INSTR(page,‘3’)>0

索引失效,未走索引

50w数据查询,耗时0.411s

个人觉得前期如果数据量不大,其实是可以用like的。毕竟其实在少量数据的情况下他们的查询效率都差不多。目前还没有测试过千万数据或者亿及数据他们的效率是怎样。

5.常见索引失效情况

1、使用like后面紧跟着%,如’%3’

explain SELECT * from tb_user where page like concat(‘%’, ‘3’,‘%’)


2、查询数据占总数据 30% 则MYSQL不会再使用索引。因为使用索引的开销反而更大。

SELECT count(*) from tb_user_copy1

总条数: 416853

explain SELECT * FROM tb_user_copy1 where age between 1 and 3

rows预计扫描行数96168,占比百分之23 走索引

explain SELECT * FROM tb_user_copy1 where age between 1 and 4

rows预计扫描行数超过百分之30 ,未走索引

也可以使用 force index(age) 让MySQL强行使用索引查询

explain SELECT * FROM tb_user_copy1 force index(age) where age BETWEEN 1 and 4

3、不满足最左匹配原则
建立了一个name,age联合索引

explain SELECT * FROM tb_user_copy1 where age =4

未走索引,全表扫描

explain SELECT * FROM tb_user_copy1 where name LIKE ‘w%’ and age =4

走了联合索引

4、字符串不加单引号索引会失效

explain SELECT * FROM tb_user_copy1 where name=123

未走索引,全表扫描

5、mysql使用不等于(!= 或者<>)的时候,无法使用索引,会导致索引失效

explain SELECT * FROM tb_user_copy1 where age >=5

全表扫描,未使用索引

6.where 子句里对有索引列使用函数,用不上索引

explain SELECT * FROM tb_user_copy1 where ABS(age) =5

全表扫描,未使用索引

7.where中索引列有运算

explain SELECT * FROM tb_user_copy1 where age *2 =10

全表扫描,未使用索引

8、is null可以走索引,is not null无法使用索引

explain SELECT * FROM tb_user_copy1 where name is null

is null走了索引

explain SELECT * FROM tb_user_copy1 where name is not null

is not null 未走索引

9、条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)。要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引

explain SELECT * FROM tb_user_copy1 where name = “G1” or age =8

只有一个age索引情况,未走索引
age和name索引都有,走了索引

一篇文章了解Like用法及常见索引失效情况相关推荐

  1. 索引使用规则及索引失效情况

    索引使用规则 联合索引 索引失效情况 联合索引 1.最左前缀法则 如果索引使用了多列(联合索引),要遵守最左前缀法则.最左前缀法则指的是查询从索引的最左列开始,并且不跳过索引中的列,如果跳跃某一列,索 ...

  2. 了解mysql文章_一篇文章带你深入了解MySQL 索引相关

    基础知识 一张数据表中具有百万级的数据时,如何精确且快速的拿出其中某一条或多条记录成为了人们思考的问题. InnoDB 存储引擎的出现让这个问题得到了很好的解决, InnoDB 存储引擎是以索引来进行 ...

  3. 盘一盘常见的6种索引失效情况

    摘要:今天就来跟大家盘一盘,常见的 6 种会发生索引失效的场景. 本文分享自华为云社区<面试官:聊聊索引失效?失效的原因是什么?>,作者:小林coding . 在工作中,如果我们想提高一条 ...

  4. 一篇文章带你解决 SpringBoot 中 favicon 失效,不显示问题

    文章目录 一.常规思路 二.其他思路 一.常规思路 正常显示我们已经知道:一篇文章带你搞定 SpringBoot 自定义欢迎页和网页图标 favicon 如果正常设置不好使常规的思路是: (1)旧版的 ...

  5. MySQL之索引失效情况

    文章目录 1 MySQL索引 1.1 简介 1.1.1 索引基础 1.2 SQL优化 1.2.1 查看执行计划 1.2.2 show profile分析 1.2.3 trace 2 索引失效 2.1 ...

  6. mysql查询where后面索引失效_where条件索引失效情况

    虽然说索引在使用上可能有种种限制,但是还是在数据库设计中被充分利用.因为在大部分情况下索引还是被用来提高数据库性能的一个工具.不过有些数据库工程师往往会犯一些低级的错误,导致索引失效.如在Where条 ...

  7. 数据库索引失效情况汇总

    "模型数空运最快" 模:模糊查询,百分号开头,索引失效,尽量避免该种查询 型:数据类型不一致,索引失效,将参数转化类型后再进行比较 数:对索引字段使用函数运算,索引失效,可以建立基 ...

  8. 八、一篇文章快速搞懂MySQL 常见的数据类型(整型、小数、字符型、日期型详解)

    常见的数据类型 1.数值型: 整型 小数: 定点数 浮点数 2.字符型: 较短的文本:char.varchar 较长的文本:text.blob(较长的二进制数据) 3.日期型: 一.整型 1)分类: ...

  9. MySQL高级or索引失效情况

    用or分割开的条件, 如果or前的条件中的列有索引,而后面的列中没有索引,那么涉及的索引都不会被用到. 示例,name字段是索引列 , 而createtime不是索引列,中间是or进行连接是不走索引的 ...

最新文章

  1. 贪心  POJ - 3617 ​​​​​​​Best Cow Line
  2. nlp homework 03
  3. 克鲁斯卡尔(并查集)hdu 1233
  4. 关于可扩展的web架构设计的探索-框架结构的描述文件
  5. vue elementUI表单输入时触发事件@input
  6. python列表片段_Python列表片段索引操作,python
  7. 500 OOPS: vsftpd: both local and anonymous access disabled
  8. LINUX 游戏服务器之旅4_mongodb环境
  9. 【eoeAndroid社区索引】Android控件知识汇总
  10. 全局安装vue-cli以及初始化
  11. 高潮再次来袭:马云,东哥两位电商大佬,强行助攻 996
  12. POI最新版本 4.1.2 操作 Excel
  13. 怎么把知网下载的caj格式论文转成wrod格式呢
  14. UVA10537 The Toll! Revisited
  15. 京东区块链(智臻链):1. 应用场景
  16. 更新Android Studio遇到:The supplied javaHome seems to be invalid. I cannot find the java executable.
  17. 二手物品网上交易系统设计与开发 毕业设计毕设参考
  18. abupy文件结构功能
  19. vim输入i无法进入编辑模式
  20. 行走C江湖多年,你修炼过五大秘笈吗?

热门文章

  1. LT、LE、EQ、NE、GE、GT 符号的含义
  2. 数字经济快速发展下企业需要什么样的数智平台?
  3. MySQL数据中有很多换行符和回车符,五面拿下阿里飞猪offer
  4. 001_把图形如何移动到原点位置
  5. 解决VMware安装macos13 Ventura无网络问题
  6. packet Capture 手机抓包工具
  7. 华为mate40pro和小米10至尊版的区别 哪个好
  8. WPF使用“阿里矢量图”简单实现LED数字显示
  9. 认证与授权协议对比:OAuth2、OpenID、SMAL
  10. html+css页面练习3