浅谈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连接查询你真的学会了吗?
Jun 02 MySQL
MySQL中的布尔值,怎么存储false或true
Jun 04 MySQL
MySQL去除重叠时间求时间差和的实现
Aug 23 MySQL
Mysql实现简易版搜索引擎的示例代码
Aug 30 MySQL
SQL实战演练之网上商城数据库商品类别数据操作
Oct 24 MySQL
MySQL创建管理LIST分区
Apr 13 MySQL
MySQL视图概念以及相关应用
Apr 19 MySQL
优化Mysql查询的示例
Apr 26 MySQL
MySQL运行报错:“Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre”解决方法
Jun 14 MySQL
MySQL示例讲解数据库约束以及表的设计
Jun 16 MySQL
MySQL transaction事务安全示例讲解
Jun 21 MySQL
MySQL远程无法连接的一些常见原因总结
Sep 23 MySQL
mysql联合索引的使用规则
为什么代码规范要求SQL语句不要过多的join
详解MySQL多版本并发控制机制(MVCC)源码
MySQL快速插入一亿测试数据
MySQL8.0.18配置多主一从
Jun 21 #MySQL
MySQL中日期型单行函数代码详解
如何搭建 MySQL 高可用高性能集群
Jun 21 #MySQL
You might like
PHP多态代码实例
2015/06/26 PHP
PHP实现git部署的方法教程
2017/12/19 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
浅谈PHP中的那些魔术常量
2020/12/02 PHP
js 全兼容可高亮二级缓冲折叠菜单
2010/06/04 Javascript
利用JS自动打开页面上链接的实现代码
2011/09/25 Javascript
JavaScript实现网页上的浮动广告的简单方法
2013/06/14 Javascript
js分页代码分享
2014/04/28 Javascript
jQuery 2.0.3 源码分析之core(一)整体架构
2014/05/27 Javascript
JavaScript中的数组特性介绍
2014/12/30 Javascript
Bootstrap中CSS的使用方法
2016/02/17 Javascript
JS 面向对象之继承---多种组合继承详解
2016/07/10 Javascript
一步一步封装自己的HtmlHelper组件BootstrapHelper(三)
2016/09/14 Javascript
vue实现可增删查改的成绩单
2016/10/27 Javascript
js选项卡的制作方法
2017/01/23 Javascript
jQuery上传多张图片带进度条样式(DEMO)
2017/03/02 Javascript
浅谈Vuex@2.3.0 中的 state 支持函数申明
2017/11/22 Javascript
vue.js使用代理和使用Nginx来解决跨域的问题
2018/02/03 Javascript
原生JS实现瀑布流插件
2018/02/06 Javascript
postman自定义函数实现 时间函数的思路详解
2019/04/17 Javascript
Vue中通过vue-router实现命名视图的问题
2020/04/23 Javascript
Python实现的检测网站挂马程序
2014/11/30 Python
python条件变量之生产者与消费者操作实例分析
2017/03/22 Python
Pyqt清空某一个QTreeewidgetItem下的所有分支方法
2019/06/17 Python
python 解决cv2绘制中文乱码问题
2019/12/23 Python
Django+RestFramework API接口及接口文档并返回json数据操作
2020/07/12 Python
python中Mako库实例用法
2020/12/31 Python
荷兰牛仔裤网上商店:Jeans Centre
2018/04/03 全球购物
医学生自荐信范文
2013/12/03 职场文书
工商企业管理实习自我鉴定
2013/12/04 职场文书
解除合同协议书
2014/04/17 职场文书
2014年仓管员工作总结
2014/11/18 职场文书
爱国电影观后感
2015/06/19 职场文书
Python中seaborn库之countplot的数据可视化使用
2021/06/11 Python
Redis之RedisTemplate配置方式(序列和反序列化)
2022/03/13 Redis
深入理解mysql事务隔离级别和存储引擎
2022/04/12 MySQL