浅谈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 16 MySQL
简单了解 MySQL 中相关的锁
May 25 MySQL
虚拟机linux端mysql数据库无法远程访问的解决办法
May 26 MySQL
MySQL中日期型单行函数代码详解
Jun 21 MySQL
MySQL里面的子查询的基本使用
Aug 02 MySQL
MySQL 用 limit 为什么会影响性能
Sep 15 MySQL
SQL基础查询和LINQ集成化查询
Jan 18 MySQL
你真的会用Mysql的explain吗
Mar 31 MySQL
MySQ InnoDB和MyISAM存储引擎介绍
Apr 26 MySQL
MySQL中正则表达式(REGEXP)使用详解
Jul 07 MySQL
MySQL池化框架学习接池自定义
Jul 23 MySQL
mysql联合索引的使用规则
为什么代码规范要求SQL语句不要过多的join
详解MySQL多版本并发控制机制(MVCC)源码
MySQL快速插入一亿测试数据
MySQL8.0.18配置多主一从
Jun 21 #MySQL
MySQL中日期型单行函数代码详解
如何搭建 MySQL 高可用高性能集群
Jun 21 #MySQL
You might like
linux下删除7天前日志的代码(php+shell)
2011/01/02 PHP
php+redis实现多台服务器内网存储session并读取示例
2017/01/12 PHP
CL vs ForZe BO5 第四场 2.13
2021/03/10 DOTA
js中判断Object、Array、Function等引用类型对象是否相等
2012/08/29 Javascript
js判断选择的时间是否大于今天的代码
2013/08/20 Javascript
json字符串之间的相互转换示例代码
2014/08/21 Javascript
jQuery Easyui学习之datagrid 动态添加、移除editor
2016/01/27 Javascript
jQuery实现的精美平滑二级下拉菜单效果代码
2016/03/28 Javascript
bootstrap可编辑下拉框jquery.editable-select
2017/10/12 jQuery
JavaScript实现正则去除a标签并保留内容的方法【测试可用】
2018/07/18 Javascript
微信小程序导入Vant报错VM292:1 thirdScriptError的解决方法
2019/08/01 Javascript
axios实现简单文件上传功能
2019/09/25 Javascript
nuxt 路由、过渡特效、中间件的实现代码
2020/11/06 Javascript
Python实现批量将word转html并将html内容发布至网站的方法
2015/07/14 Python
使用pandas对两个dataframe进行join的实例
2018/06/08 Python
python实现俄罗斯方块
2018/06/26 Python
Python爬虫爬取新浪微博内容示例【基于代理IP】
2018/08/03 Python
Python判断字符串是否为字母或者数字(浮点数)的多种方法
2018/08/03 Python
使用Python的SymPy库解决数学运算问题的方法
2019/03/27 Python
python查询文件夹下excel的sheet名代码实例
2019/04/02 Python
linux下安装python3和对应的pip环境教程详解
2019/07/01 Python
python定义类self用法实例解析
2020/01/22 Python
HTML5 canvas 基本语法
2009/08/26 HTML / CSS
迷你唐卡软皮鞋:Minnetonka Moccasin
2018/05/01 全球购物
巴西箱包、背包、钱包和旅行配件购物网站:Inovathi
2019/12/14 全球购物
国贸专业的职业规划范文
2014/01/23 职场文书
医生爱岗敬业演讲稿
2014/08/26 职场文书
领导班子对照检查剖析材料
2014/10/13 职场文书
2014年房地产工作总结范文
2014/11/19 职场文书
2014年工人工作总结
2014/11/25 职场文书
单位实习鉴定评语
2015/01/04 职场文书
地球一小时活动总结
2015/02/27 职场文书
2015年教师党员个人总结
2015/11/24 职场文书
服务行业标语口号
2015/12/26 职场文书
Python中第三方库Faker的使用详解
2022/04/02 Python
为什么MySQL8新特性会修改自增主键属性
2022/04/18 MySQL