浅谈mysql增加索引不生效的几种情况


Posted in MySQL onJune 23, 2021

增加索引可以提高查询效率。

增加索引就是增加一个索引文件,存放的是数据的地址,类似与我们文档的目录,在查找过程中可以不用从书的内容查找,直接根据目录对应的页码查找。索引是根据地址查找。
创建索引,索引使用的数据结构也有很多种。常见的是B-tree,哈希等。mysql默认使用的数据库索引是innerDB,innerDB的索引结构是B-tree。
但是在使用过程中哪些情况增加索引无法达到预期的效果呢?下面列举几种常见情况:
假设name age address 都已经加了索引。索引名字分别为 index_name,index_age,index_address。

用explain查看SQL的执行计划

执行计划的 type

表示MySQL在表中找到所需行的方式,又称“访问类型”,常见类型如下:

ALL, index, range, ref, eq_ref, const, system, NULL
ALL:Full Table Scan, MySQL将遍历全表以找到匹配的行
index:Full Index Scan,index与ALL区别为index类型只遍历索引树
range:索引范围扫描,对索引的扫描开始于某一点,返回匹配值域的行。显而易见的索引范围扫描是带有between或者where子句里带有<, >查询。当mysql使用索引去查找一系列值时,例如IN()和OR列表,也会显示range(范围扫描),当然性能上面是有差异的。
ref:使用非唯一索引扫描或者唯一索引的前缀扫描,返回匹配某个单独值的记录行
eq_ref:类似ref,区别就在使用的索引是唯一索引,对于每个索引键值,表中只有一条记录匹配,简单来说,就是多表连接中使用primary key或者 unique key作为关联条件。

1、使用查询多列使用or,type=all

浅谈mysql增加索引不生效的几种情况

2、使用模糊查询,type=all

浅谈mysql增加索引不生效的几种情况

3、在加索引的字段上有运算

浅谈mysql增加索引不生效的几种情况

4、如果列类型是字符串,需要使用引号引用起来。name字段是字符串类型

没引号 type=all

浅谈mysql增加索引不生效的几种情况

有引号 tye=ref

浅谈mysql增加索引不生效的几种情况

首先mysql有个类型转换规则就是将“字符转成数字”,上面的sql是包含运算的:
explain SELECT name,age,address FROM user where cast(name as signed)= 10;

5、反向查询区分情况

(not , not in, not like, <>, != ,!>,!< ) 使用索引效果

浅谈mysql增加索引不生效的几种情况

浅谈mysql增加索引不生效的几种情况

浅谈mysql增加索引不生效的几种情况

浅谈mysql增加索引不生效的几种情况

浅谈mysql增加索引不生效的几种情况

浅谈mysql增加索引不生效的几种情况

其他情况

1、联合索引中关联字段没有使用相同的字符集;
2、联合索引查询时没有用到第一个索引字段,即不满足最左原则;
3、本身数据量很少,mysql会判断是否需要使用索引;

到此这篇关于浅谈mysql增加索引不生效的几种情况的文章就介绍到这了,更多相关mysql增加索引不生效内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
mysql批量新增和存储的方法实例
Apr 07 MySQL
MySQL时间设置注意事项的深入总结
May 06 MySQL
详解MySQL中的主键与事务
May 27 MySQL
Node-Red实现MySQL数据库连接的方法
Aug 07 MySQL
MySQL中order by的使用详情
Nov 17 MySQL
MySQL为数据表建立索引的原则详解
Mar 03 MySQL
分享MySQL常用 内核 Debug 几种常见方法
Mar 17 MySQL
解决MySQL报“too many connections“错误
Apr 19 MySQL
MYSQL如何查看操作日志详解
May 30 MySQL
Mysql中@和@@符号的详细使用指南
Jun 05 MySQL
MySQL控制流函数(-if ,elseif,else,case...when)
Jul 07 MySQL
MySQL使用IF语句及用case语句对条件并结果进行判断 
Sep 23 MySQL
mysql联合索引的使用规则
为什么代码规范要求SQL语句不要过多的join
详解MySQL多版本并发控制机制(MVCC)源码
MySQL快速插入一亿测试数据
MySQL8.0.18配置多主一从
Jun 21 #MySQL
MySQL中日期型单行函数代码详解
如何搭建 MySQL 高可用高性能集群
Jun 21 #MySQL
You might like
php强大的时间转换函数strtotime
2016/02/18 PHP
浅谈PHP的反射机制
2016/12/15 PHP
PHP数字金额转换成中文大写显示
2019/01/05 PHP
如何确保JavaScript的执行顺序 之实战篇
2011/03/03 Javascript
javascript如何判断输入的url是否正确
2014/04/11 Javascript
简单实现限制uploadify上传个数
2015/11/16 Javascript
跟我学习javascript创建对象(类)的8种方法
2015/11/20 Javascript
高性能JavaScript循环语句和条件语句
2016/01/20 Javascript
jQuery form插件之formDdata参数校验表单及验证后提交
2016/01/23 Javascript
JS面试题---关于算法台阶的问题
2016/07/26 Javascript
js学习之----深入理解闭包
2016/11/21 Javascript
Vue组件化通讯的实例代码
2017/06/23 Javascript
JS实现的冒泡排序,快速排序,插入排序算法示例
2019/03/02 Javascript
vue+element模态框中新增模态框和删除功能
2019/06/11 Javascript
vue双击事件2.0事件监听(点击-双击-鼠标事件)和事件修饰符操作
2020/07/27 Javascript
如何使用jQuery操作Cookies方法解析
2020/09/08 jQuery
如何通过Proxy实现JSBridge模块化封装
2020/10/22 Javascript
原生JS实现拖拽效果
2020/12/04 Javascript
[01:50]2014DOTA2西雅图邀请赛 专访欢乐周宝龙
2014/07/08 DOTA
学习python之编写简单乘法口诀表实现代码
2016/02/27 Python
分享Python切分字符串的一个不错方法
2018/12/14 Python
postman模拟访问具有Session的post请求方法
2019/07/15 Python
Python爬虫运用正则表达式的方法和优缺点
2019/08/25 Python
Python 字典一个键对应多个值的方法
2020/09/29 Python
C++和python实现阿姆斯特朗数字查找实例代码
2020/12/07 Python
Reformation官网:美国女装品牌
2018/09/14 全球购物
Manuka Doctor英国官网:真正的麦卢卡蜂蜜和护肤品
2018/10/26 全球购物
德国婴儿服装和婴儿用品购买网站:Baby Sweets
2019/12/08 全球购物
Zalando Lounge瑞士:时尚与生活方式购物俱乐部
2020/03/12 全球购物
介绍一下EJB的分类及其各自的功能及应用
2016/08/23 面试题
JSF界面控制层技术
2013/06/17 面试题
经济信息系毕业生自荐信范文
2014/03/15 职场文书
春节联欢晚会主持词范文
2014/03/24 职场文书
先进单位申报材料
2014/12/25 职场文书
2015年上半年信访工作总结
2015/03/30 职场文书
SpringBoot+Redis实现布隆过滤器的示例代码
2022/03/17 Java/Android