浅谈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 05 MySQL
MySQL时间设置注意事项的深入总结
May 06 MySQL
MySQL 逻辑备份与恢复测试的相关总结
May 14 MySQL
QT连接MYSQL数据库的详细步骤
Jul 07 MySQL
MySQL令人大跌眼镜的隐式转换
Aug 23 MySQL
MySQL中CURRENT_TIMESTAMP的使用方式
Nov 27 MySQL
mysql 生成连续日期及变量赋值
Mar 20 MySQL
mysql使用instr达到in(字符串)的效果
Apr 03 MySQL
Mysql开启外网访问
May 15 MySQL
MYSQL事务的隔离级别与MVCC
May 25 MySQL
了解MySQL查询语句执行过程(5大组件)
Aug 14 MySQL
mysql联合索引的使用规则
为什么代码规范要求SQL语句不要过多的join
详解MySQL多版本并发控制机制(MVCC)源码
MySQL快速插入一亿测试数据
MySQL8.0.18配置多主一从
Jun 21 #MySQL
MySQL中日期型单行函数代码详解
如何搭建 MySQL 高可用高性能集群
Jun 21 #MySQL
You might like
怎么使 Mysql 数据同步
2006/10/09 PHP
php创建多级目录代码
2008/06/05 PHP
在Windows下编译适用于PHP 5.2.12及5.2.13的eAccelerator.dll(附下载)
2010/05/04 PHP
为IP查询添加GOOGLE地图功能的代码
2010/08/08 PHP
PHP获得数组交集与差集的方法
2015/06/10 PHP
简单了解WordPress开发中update_option()函数的用法
2016/01/11 PHP
php+redis在实际项目中HTTP 500: Internal Server Error故障排除
2017/02/05 PHP
PHP实现负载均衡的加权轮询方法分析
2018/08/22 PHP
Referer原理与图片防盗链实现方法详解
2019/07/03 PHP
IE 上下滚动展示模仿Marquee机制
2009/12/20 Javascript
用js实现计算加载页面所用的时间
2010/04/02 Javascript
jquery交替变换颜色的三种方法 实例代码
2013/11/19 Javascript
JavaScript原生对象之String对象的属性和方法详解
2015/03/13 Javascript
js中日期的加减法
2015/05/06 Javascript
ECMAScript中函数function类型
2015/06/03 Javascript
纯JS代码实现一键分享功能
2016/04/20 Javascript
Vue中的基础过渡动画及实现原理解析
2018/12/04 Javascript
[原创]微信小程序获取网络类型的方法示例
2019/03/01 Javascript
JavaScript函数定义方法实例详解
2019/03/05 Javascript
使用npm命令提示: 'npm' 不是内部或外部命令,也不是可运行的程序的处理方法
2020/05/14 Javascript
[02:30]DOTA2放量测试专访海涛:呼吁保护新手玩家
2013/08/26 DOTA
[01:03:50]DOTA2-DPC中国联赛 正赛 CDEC vs DLG BO3 第二场 2月7日
2021/03/11 DOTA
Python使用urllib2模块实现断点续传下载的方法
2015/06/17 Python
python中hashlib模块用法示例
2017/10/30 Python
查看django执行的sql语句及消耗时间的两种方法
2018/05/29 Python
python实现几种归一化方法(Normalization Method)
2019/07/31 Python
Pytorch实现的手写数字mnist识别功能完整示例
2019/12/13 Python
Python实现i人事自动打卡的示例代码
2020/01/09 Python
python selenium操作cookie的实现
2020/03/18 Python
基于python实现ROC曲线绘制广场解析
2020/06/28 Python
关于python3.7安装matplotlib始终无法成功的问题的解决
2020/07/28 Python
双方协议书
2014/04/22 职场文书
甜品店创业计划书
2014/09/21 职场文书
车辆挂靠协议书
2016/03/23 职场文书
合作意向书范本
2019/04/17 职场文书
2019开业庆典剪彩仪式主持词!
2019/07/22 职场文书