mysql索引失效原因(MySQL索引失效的几种情况详析)
mysql索引失效原因
MySQL索引失效的几种情况详析1.前导模糊查询不能利用索引(like '%xx'或者like '%xx%')
假如有这样一列code的值为'aaa','aab','baa','bab' ,如果where code like '%ab'条件,由于前面是
模糊的,所以不能利用索引的顺序,必须一个个去找,看是否满足条件。这样会导致全索引扫描或者全表扫
描。如果是这样的条件where code like 'a % ',就可以查找code中a开头的code的位置,当碰到b开头的
数据时,就可以停止查找了,因为后面的数据一定不满足要求。这样就可以利用索引了。
2.如果是组合索引的话,如果不按照索引的顺序进行查找,比如直接使用第三个位置上的索引而忽略第一二个位置上的索引时,则会进行全表查询
索引为c1,c2,c3,c4
上图结果显示直接使用c3是全表查询,无法使用该索引的,所以c3字段使用索引的前提是c1,c2两字段均使用了索引。
3.条件中有or
应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:
|
select id from t where num=10 or num=20 |
可以这样查询:
|
select id from t where num=10 union all select id from t where num=20 |
4.索引无法存储null值,所以where的判断条件如果对字段进行了null值判断,将导致数据库放弃索引而进行全表查询,如
|
select id from t where num is null |
可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:
|
select id from t where num=0 |
a.单列索引无法储null值,复合索引无法储全为null的值。
b.查询时,采用is null条件时,不能利用到索引,只能全表扫描。
为什么索引列无法存储null值?
a.索引是有序的。null值进入索引时,无法确定其应该放在哪里。(将索引列值进行建树,其中必然涉及到诸多的比较操作,null 值是不确定值无法比较,无法确定null出现在索引树的叶子节点位置。)
5.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。
6.in 和 not in 也要慎用,否则会导致全表扫描,如:
|
select id from t where num in (1,2,3) |
对于连续的数值,能用 between 就不要用 in 了:
|
select id from t where num between 1 and 3 |
7. 应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如:
–name以abc开头的id
|
select id from t where substring ( name ,1,3)= 'abc' |
8.应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:
|
select id from t where num/2=100 |
应改为:
|
select id from t where num=100*2 |
总结
到此这篇关于mysql索引失效的几种情况的文章就介绍到这了,更多相关mysql索引失效内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
原文链接:https://segmentfault.com/a/1190000038330186
- 织梦源码安装数据库怎么填(Mysql修改端口号 织梦DedeCMS设置教程)
- 软件测试常用mysql语句(MySQL压力测试工具Mysqlslap的使用)
- mysql中的默认mysql数据库作用(MySQL安装后默认自带数据库的作用详解)
- mysqlint后面的4是什么意思(MySQL中intn后面的n到底代表的是什么意思)
- win10下安装mysql8.0.23 及 “服务没有响应控制功能”问题解决办法(win10下安装mysql8.0.23 及 “服务没有响应控制功能”问题解决办法)
- mysql重复插入数据教程(Mysql避免重复插入数据的4种方式)
- mysql怎么解决幻读问题(详解MySQL幻读及如何消除)
- mysql索引如何使用(MySQL 索引和数据表该如何维护)
- windowsmysql服务在哪里(解决windows service 2012阿里云服务器在搭建mysql时缺少msvcr100.dll文件的问题)
- mysql锁技术(MySQL 加锁控制并发的方法)
- mysql8.0.12安装教程图解(mysql 8.0.22 zip压缩包版免安装下载、安装配置步骤详解)
- mysqltruncate分区自定义参数(MySQL truncate table语句的使用)
- mysql的存储性能优化(MySQL的查询缓存和Buffer Pool)
- mysql修改初始密码教程(使用MySQL命令行修改密码)
- phpstudy怎么修改mysql版本(PhpStudy集成环境升级MySQL数据库版本的方法)
- python 数据库实现学生管理系统(python+mysql实现教务管理系统)
- 谢广坤,你这么欺负谢腾飞,良心不会痛吗(你这么欺负谢腾飞)
- 乡村爱情15 宋晓峰怀疑自己孩子,腾飞与姜奶奶亲子鉴定出结果(宋晓峰怀疑自己孩子)
- 《乡村爱情13》开播,新版刘能以假乱真,编剧思维进入瓶颈(新版刘能以假乱真)
- 当年的 白洋淀战神 练肌肉 嘎子哥也成为行走的荷尔蒙(当年的白洋淀战神)
- 肌肉小子陈康, 亚洲巨兽 黄哲勋,哪个才是你的菜(肌肉小子陈康亚洲巨兽)
- 新闻周刊 青岛网红 赵厂长 编段子一箩筐输出快乐,陪父亲十二载勇斗病魔(新闻周刊青岛网红)
热门推荐
- css五种使用方法(CSS 的加载及加载顺序简介)
- 搭建php和mysql的运行环境(Windows环境开发PHP完整配置教程Apache+Mysql+PHP)
- canvas绘制动态线条(5分钟实现Canvas鼠标跟随动画背景)
- arm堆栈解析程序(浅析ARM架构下的函数的调用过程)
- python numpy 安装(python3.6下Numpy库下载与安装图文教程)
- php中字符串反转的函数(php常用字符串查找函数strstr与strpos实例分析)
- dedecms标题在哪改(织梦DEDECMS文章拼音命名规则时去掉id的方法)
- 如何使用python定时运行(Python实现定时执行任务的三种方式简单示例)
- 网站图片防盗链的常见方法
- mysql怎么设置存储记录(MySQL 的一行记录是怎么存储的?)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9