浅谈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 06 MySQL
mysql left join快速转inner join的过程
Jun 30 MySQL
QT连接MYSQL数据库的详细步骤
Jul 07 MySQL
MySQL 5.7常见数据类型
Jul 15 MySQL
MySQL深度分页(千万级数据量如何快速分页)
Jul 25 MySQL
MySQL千万级数据表的优化实战记录
Aug 04 MySQL
MySQL 如何限制一张表的记录数
Sep 14 MySQL
MySQL面试题讲解之如何设置Hash索引
Nov 01 MySQL
mysql timestamp比较查询遇到的坑及解决
Nov 27 MySQL
MySQL RC事务隔离的实现
Mar 31 MySQL
MySQL分区以及建索引的方法总结
Apr 13 MySQL
MySQL数据库事务的四大特性
Apr 20 MySQL
mysql联合索引的使用规则
为什么代码规范要求SQL语句不要过多的join
详解MySQL多版本并发控制机制(MVCC)源码
MySQL快速插入一亿测试数据
MySQL8.0.18配置多主一从
Jun 21 #MySQL
MySQL中日期型单行函数代码详解
如何搭建 MySQL 高可用高性能集群
Jun 21 #MySQL
You might like
php GD绘制24小时柱状图
2008/06/28 PHP
如何利用PHP执行.SQL文件
2013/07/05 PHP
phpmailer在服务器上不能正常发送邮件的解决办法
2014/07/08 PHP
PHP获取当前时间不准确问题解决方案
2020/08/14 PHP
slice函数的用法 之不错的应用
2006/12/29 Javascript
javascript 面向对象编程 聊聊对象的事
2009/09/17 Javascript
让table变成exls的示例代码
2014/03/24 Javascript
基于jquery实现的图片在各种分辨率下未知的容器内上下左右居中
2014/05/11 Javascript
用C/C++来实现 Node.js 的模块(二)
2014/09/24 Javascript
jQuery选择器源码解读(七):elementMatcher函数
2015/03/31 Javascript
node.js微信公众平台开发教程
2016/03/04 Javascript
js验证框架实现代码分享
2016/05/18 Javascript
jQuery实现布局高宽自适应的简单实例
2016/05/28 Javascript
jQuery实现表格文本框淡入更改值后淡出效果
2016/09/27 Javascript
微信小程序  modal弹框组件详解
2016/10/27 Javascript
jquery网页日历显示控件calendar3.1使用详解
2016/11/24 Javascript
jQuery插件zTree实现的基本树与节点获取操作示例
2017/03/08 Javascript
redux-saga 初识和使用
2018/03/10 Javascript
微信小程序实现团购或秒杀批量倒计时
2020/11/01 Javascript
Echarts地图添加引导线效果(labelLine)
2019/09/30 Javascript
微信小程序商品详情页底部弹出框
2019/11/22 Javascript
Node.js API详解之 tty功能与用法实例分析
2020/04/27 Javascript
如何手动实现一个 JavaScript 模块执行器
2020/10/16 Javascript
nuxt 自定义 auth 中间件实现令牌的持久化操作
2020/11/05 Javascript
[48:28]完美世界DOTA2联赛循环赛FTD vs Magma第二场 10月30日
2020/10/31 DOTA
[28:07]完美世界DOTA2联赛PWL S3 Phoenix vs INK ICE 第二场 12.13
2020/12/17 DOTA
Python自动化操作实现图例绘制
2020/07/09 Python
我们是伦敦女孩:WalG
2018/01/08 全球购物
JD Sports芬兰:英国领先的运动鞋和运动服饰零售商
2018/11/16 全球购物
什么是Oracle的后台进程background processes?都有哪些后台进程?
2012/04/26 面试题
大学生职业生涯规划书模板
2014/01/18 职场文书
《广玉兰》教学反思
2014/04/14 职场文书
分居协议书范本
2014/11/03 职场文书
《曾国藩家书》读后感——读家书,立家风
2019/08/21 职场文书
一文帮你理解PReact10.5.13源码
2021/04/03 Javascript
用Python远程登陆服务器的步骤
2021/04/16 Python