浅谈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 使用事件(Events)完成计划任务
May 24 MySQL
MySQL REVOKE实现删除用户权限
Jun 18 MySQL
新手入门Mysql--概念
Jun 18 MySQL
关于MySQL中的 like操作符详情
Nov 17 MySQL
MySQL数据库⾼可⽤HA实现小结
Jan 22 MySQL
提高系统的吞吐量解决数据库重复写入问题
Apr 23 MySQL
MySQL数据库简介与基本操作
May 30 MySQL
sql注入报错之注入原理实例解析
Jun 10 MySQL
mysql数据库隔离级别详解
Jun 16 MySQL
数据设计之权限的实现
Aug 05 MySQL
mysql通过group by分组取最大时间对应数据的两种有效方法
Sep 23 MySQL
SQL中去除重复数据的几种方法汇总(窗口函数对数据去重)
May 08 MySQL
mysql联合索引的使用规则
为什么代码规范要求SQL语句不要过多的join
详解MySQL多版本并发控制机制(MVCC)源码
MySQL快速插入一亿测试数据
MySQL8.0.18配置多主一从
Jun 21 #MySQL
MySQL中日期型单行函数代码详解
如何搭建 MySQL 高可用高性能集群
Jun 21 #MySQL
You might like
建立文件交换功能的脚本(三)
2006/10/09 PHP
如何设置mysql允许外网访问
2013/06/04 PHP
一个漂亮的php验证码类(分享)
2013/08/06 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十六)
2014/06/30 PHP
Zend Framework教程之MVC框架的Controller用法分析
2016/03/07 PHP
thinkPHP5.0框架整体架构总览【应用,模块,MVC,驱动,行为,命名空间等】
2017/03/25 PHP
php设计模式之适配器模式原理、用法及注意事项详解
2019/09/24 PHP
JS数学函数Exp使用说明
2012/08/09 Javascript
JSON格式化输出
2014/11/10 Javascript
DOM节点删除函数removeChild()用法实例
2015/01/12 Javascript
整理JavaScript创建对象的八种方法
2015/11/03 Javascript
Jquery ajax基础教程
2015/11/20 Javascript
Vue.JS入门教程之列表渲染
2016/12/01 Javascript
详解nodeJS中读写文件方法的区别
2017/03/06 NodeJs
jQuery实现拖动效果的实例代码
2017/06/25 jQuery
javascript ES6 新增了let命令使用介绍
2017/07/07 Javascript
详解ionic本地相册、拍照、裁剪、上传(单图完全版)
2017/10/10 Javascript
js定时器+简单的动画效果实例
2017/11/10 Javascript
[03:57]DOTA2英雄梦之声_第03期_幻影刺客
2014/06/21 DOTA
[03:01]2014DOTA2国际邀请赛 DC:我是核弹粉,为Burning和国土祝福
2014/07/13 DOTA
简单讲解Python中的数字类型及基本的数学计算
2016/03/11 Python
python处理Excel xlrd的简单使用
2017/09/12 Python
python实现协同过滤推荐算法完整代码示例
2017/12/15 Python
Python3实现计算两个数组的交集算法示例
2019/04/03 Python
Django模型序列化返回自然主键值示例代码
2019/06/12 Python
在tensorflow以及keras安装目录查询操作(windows下)
2020/06/19 Python
Python selenium键盘鼠标事件实现过程详解
2020/07/28 Python
Stylenanda中文站:韩国一线网络服装品牌
2016/12/22 全球购物
财务会计专业毕业生自荐信
2013/10/19 职场文书
医学专业毕业生推荐信
2013/11/14 职场文书
竞选学生会主席演讲稿
2014/04/24 职场文书
演讲比赛的活动方案
2014/08/28 职场文书
小学生运动会通讯稿
2014/09/23 职场文书
乡镇党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
2014年依法行政工作总结
2014/11/19 职场文书
JavaScript嵌入百度地图API的最详细方法
2021/04/16 Javascript