浅谈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中in和exists区别详解
Jun 03 MySQL
MySQL 全文检索的使用示例
Jun 07 MySQL
MySQL命令无法输入中文问题的解决方式
Aug 30 MySQL
MySQL中的隐藏列的具体查看
Sep 04 MySQL
一文搞懂MySQL索引页结构
Feb 28 MySQL
浅谈MySQL中的六种日志
Mar 23 MySQL
Mysql如何实现不存在则插入,存在则更新
Mar 25 MySQL
Nebula Graph解决风控业务实践
Mar 31 MySQL
一文简单了解MySQL前缀索引
Apr 03 MySQL
mysql使用instr达到in(字符串)的效果
Apr 03 MySQL
MySQL 字符集 character
May 04 MySQL
MySQL详细讲解变量variables的用法
Jun 21 MySQL
mysql联合索引的使用规则
为什么代码规范要求SQL语句不要过多的join
详解MySQL多版本并发控制机制(MVCC)源码
MySQL快速插入一亿测试数据
MySQL8.0.18配置多主一从
Jun 21 #MySQL
MySQL中日期型单行函数代码详解
如何搭建 MySQL 高可用高性能集群
Jun 21 #MySQL
You might like
php项目打包方法
2008/02/18 PHP
php 如何获取文件的后缀名
2016/06/05 PHP
PHP操作XML中XPath的应用示例
2019/07/04 PHP
指定js可访问其它域名的cookie的方法
2007/09/18 Javascript
javascript 精粹笔记
2010/05/09 Javascript
JavaScript实现x秒后自动跳转到一个页面
2013/01/03 Javascript
javascript数组的使用
2013/03/28 Javascript
通过jquery 获取URL参数并进行转码
2014/08/18 Javascript
详解js跨域原理以及2种解决方案
2015/12/09 Javascript
基于jQuery通过jQuery.form.js插件实现异步上传
2015/12/13 Javascript
巧方法 JavaScript获取超链接的绝对URL地址
2016/06/14 Javascript
详解Nodejs基于mongoose模块的增删改查的操作
2016/12/21 NodeJs
简单的vue-resourse获取json并应用到模板示例
2017/02/10 Javascript
JS字符串false转boolean的方法(推荐)
2017/03/08 Javascript
jQuery插件jsonview展示json数据
2018/05/26 jQuery
详解vue 兼容IE报错解决方案
2018/12/29 Javascript
JS中的算法与数据结构之栈(Stack)实例详解
2019/08/20 Javascript
vuex根据不同的用户权限展示不同的路由列表功能
2019/09/20 Javascript
15 分钟掌握vue-next响应式原理
2019/10/13 Javascript
js实现购物车商品数量加减
2020/09/21 Javascript
[02:54]DOTA2英雄基础教程 撼地者
2014/01/14 DOTA
python中循环语句while用法实例
2015/05/16 Python
基于Linux系统中python matplotlib画图的中文显示问题的解决方法
2017/06/15 Python
Python基于pycrypto实现的AES加密和解密算法示例
2018/04/10 Python
python实现校园网自动登录的示例讲解
2018/04/22 Python
升级keras解决load_weights()中的未定义skip_mismatch关键字问题
2020/06/12 Python
Python中的流程控制详解
2021/02/18 Python
一款纯css3实现的颜色渐变按钮的代码教程
2014/11/12 HTML / CSS
解决Firefox下不支持outerHTML问题代码分享
2014/06/04 HTML / CSS
JBL英国官网:JBL UK
2018/07/04 全球购物
职业生涯规划书结束语
2014/04/15 职场文书
关于青春的演讲稿三分钟
2014/08/22 职场文书
2014年安全管理工作总结
2014/12/01 职场文书
打架检讨书范文
2015/01/27 职场文书
布达拉宫的导游词
2015/02/02 职场文书
5种方法告诉你如何使JavaScript 代码库更干净
2021/09/15 Javascript