浅谈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 COUNT函数的使用与优化
May 10 MySQL
MySQL 8.0 之不可见列的基本操作
May 20 MySQL
Mysql数据库索引面试题(程序员基础技能)
May 31 MySQL
浅谈MySQL user权限表
Jun 18 MySQL
新手入门Mysql--sql执行过程
Jun 20 MySQL
MySql子查询IN的执行和优化的实现
Aug 02 MySQL
MySQL Shell import_table数据导入的实现
Aug 07 MySQL
Mysql案例刨析事务隔离级别
Sep 25 MySQL
Mysql 文件配置解析介绍
May 06 MySQL
Mysql 一主多从的部署
May 20 MySQL
MySql数据库触发器使用教程
Jun 01 MySQL
Mysql中的触发器定义及语法介绍
Jun 25 MySQL
mysql联合索引的使用规则
为什么代码规范要求SQL语句不要过多的join
详解MySQL多版本并发控制机制(MVCC)源码
MySQL快速插入一亿测试数据
MySQL8.0.18配置多主一从
Jun 21 #MySQL
MySQL中日期型单行函数代码详解
如何搭建 MySQL 高可用高性能集群
Jun 21 #MySQL
You might like
PHP 中执行系统外部命令
2006/10/09 PHP
不错的一篇面向对象的PHP开发模式(简写版)
2007/03/15 PHP
YII2框架中excel表格导出的方法详解
2017/07/21 PHP
使用jQuery的ajax功能实现的RSS Reader 代码
2009/09/03 Javascript
mysql输出数据赋给js变量报unterminated string literal错误原因
2010/05/22 Javascript
jQuery 定时局部刷新(setInterval)
2010/11/19 Javascript
使用JQuery FancyBox插件实现图片展示特效
2015/11/16 Javascript
深入理解JavaScript程序中内存泄漏
2016/03/17 Javascript
JS实现图片预览的两种方式
2017/06/27 Javascript
使用jQuery实现简单的tab框实例
2017/08/22 jQuery
AngularJS中的作用域实例分析
2018/05/16 Javascript
手淘flexible.js框架使用和源代码讲解小结
2018/10/15 Javascript
解决layui追加或者动态修改的表单元素“没效果”的问题
2019/09/18 Javascript
[02:09]2018DOTA2亚洲邀请赛TNC赛前采访
2018/04/04 DOTA
基于Python实现对PDF文件的OCR识别
2016/08/05 Python
Python实现抓取网页生成Excel文件的方法示例
2017/08/05 Python
Python简单爬虫导出CSV文件的实例讲解
2018/07/06 Python
Python输出\u编码将其转换成中文的实例
2018/12/15 Python
python爬取cnvd漏洞库信息的实例
2019/02/14 Python
Python安装及Pycharm安装使用教程图解
2019/09/20 Python
Python 实现Numpy中找出array中最大值所对应的行和列
2019/11/26 Python
Pycharm2020.1安装中文语言插件的详细教程(不需要汉化)
2020/08/07 Python
Amara德国:家居饰品、设计师品牌和豪华礼品
2019/05/20 全球购物
光声世纪笔试题目
2012/08/25 面试题
护理专科毕业推荐信
2013/11/10 职场文书
校园达人秀策划书
2014/01/12 职场文书
医院工作检讨书范文
2014/02/10 职场文书
集体备课反思
2014/02/12 职场文书
青年文明号服务承诺
2014/03/31 职场文书
煤矿安全演讲稿
2014/05/09 职场文书
“九一八事变纪念日”国旗下讲话稿
2014/09/14 职场文书
违反单位工作制度检讨书
2014/10/25 职场文书
行政助理岗位职责范本
2015/04/11 职场文书
拖欠货款起诉状
2015/05/20 职场文书
婚宴主持词
2015/06/30 职场文书
2016年机关单位节能宣传周活动总结
2016/04/05 职场文书