浅谈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 14 MySQL
虚拟机linux端mysql数据库无法远程访问的解决办法
May 26 MySQL
MySQL 数据类型选择原则
May 27 MySQL
Mysql中存储引擎的区别及比较
Jun 04 MySQL
MySQL 外键约束和表关系相关总结
Jun 20 MySQL
mysql下的max_allowed_packet参数设置详解
Feb 12 MySQL
mysql使用instr达到in(字符串)的效果
Apr 03 MySQL
MySQL提取JSON字段数据实现查询
Apr 22 MySQL
使用Mysql计算地址的经纬度距离和实时位置信息
Apr 29 MySQL
MySQL数据库查询之多表查询总结
Aug 05 MySQL
MySQL 原理优化之Group By的优化技巧
Aug 14 MySQL
mysql联合索引的使用规则
为什么代码规范要求SQL语句不要过多的join
详解MySQL多版本并发控制机制(MVCC)源码
MySQL快速插入一亿测试数据
MySQL8.0.18配置多主一从
Jun 21 #MySQL
MySQL中日期型单行函数代码详解
如何搭建 MySQL 高可用高性能集群
Jun 21 #MySQL
You might like
基于mysql的论坛(6)
2006/10/09 PHP
php 验证码(倾斜,正弦干扰线,黏贴,旋转)
2013/06/29 PHP
php+html5基于websocket实现聊天室的方法
2015/07/17 PHP
详解WordPress中提醒安装插件以及隐藏插件的功能实现
2015/12/25 PHP
php实现自定义中奖项数和概率的抽奖函数示例
2017/05/26 PHP
TP - 比RBAC更好的权限认证方式(Auth类认证)
2021/03/09 PHP
javascript编程起步(第七课)
2007/01/10 Javascript
Jquery 点击按钮显示和隐藏层的代码
2011/07/25 Javascript
JS完成代码前最好对其做5件事
2013/04/07 Javascript
javascript eval(func())使用示例
2013/12/05 Javascript
js运动应用实例解析
2015/12/28 Javascript
JavaScript学习笔记之数组随机排序
2016/03/23 Javascript
Node.js中process模块常用的属性和方法
2016/12/13 Javascript
js实现模糊匹配功能
2017/02/15 Javascript
Bootstrap table右键功能实现方法
2017/02/20 Javascript
VUE前端cookie简单操作
2017/10/17 Javascript
推荐10款扩展Web表单的JS插件
2017/12/25 Javascript
利用Bootstrap Multiselect实现下拉框多选功能
2019/04/08 Javascript
node.js开发辅助工具nodemon安装与配置详解
2020/02/06 Javascript
BootStrap前端框架使用方法详解
2020/02/26 Javascript
简单了解vue 插值表达式Mustache
2020/07/22 Javascript
详解Python中的变量及其命名和打印
2016/03/11 Python
详解K-means算法在Python中的实现
2017/12/05 Python
Python实现扣除个人税后的工资计算器示例
2018/03/26 Python
python DataFrame获取行数、列数、索引及第几行第几列的值方法
2018/04/08 Python
Python中的函数作用域
2018/05/07 Python
详解Python传入参数的几种方法
2019/05/16 Python
python 实现在tkinter中动态显示label图片的方法
2019/06/13 Python
python 猴子补丁(monkey patch)
2019/06/26 Python
python opencv 二值化 计算白色像素点的实例
2019/07/03 Python
浅谈Python中的模块
2020/06/10 Python
Python 如何查找特定类型文件
2020/08/17 Python
推广普通话共筑中国梦演讲稿
2014/09/21 职场文书
党组织领导班子整改方案
2014/10/25 职场文书
介绍信模板
2015/01/31 职场文书
女性健康讲座主持词
2015/07/04 职场文书