浅谈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 相关文章推荐
浅析InnoDB索引结构
Apr 05 MySQL
Idea连接MySQL数据库出现中文乱码的问题
Apr 14 MySQL
MySQL InnoDB ReplicaSet(副本集)简单介绍
Apr 24 MySQL
MySQL数据迁移相关总结
Apr 29 MySQL
MySQL系列之一 MariaDB-server安装
Jul 02 MySQL
通过shell脚本对mysql的增删改查及my.cnf的配置
Jul 07 MySQL
SQL实现LeetCode(176.第二高薪水)
Aug 04 MySQL
MyBatis 动态SQL全面详解
Oct 05 MySQL
MySQL 服务和数据库管理
Nov 11 MySQL
mysql中数据库覆盖导入的几种方式总结
Mar 25 MySQL
MySql重置root密码 --skip-grant-tables
Apr 11 MySQL
讲解MySQL增删改操作
May 06 MySQL
mysql联合索引的使用规则
为什么代码规范要求SQL语句不要过多的join
详解MySQL多版本并发控制机制(MVCC)源码
MySQL快速插入一亿测试数据
MySQL8.0.18配置多主一从
Jun 21 #MySQL
MySQL中日期型单行函数代码详解
如何搭建 MySQL 高可用高性能集群
Jun 21 #MySQL
You might like
PHP正则表达式之定界符和原子介绍
2012/10/05 PHP
WordPress开发中用于获取近期文章的PHP函数使用解析
2016/01/05 PHP
Ajax::prototype 源码解读
2007/01/22 Javascript
javascript 命名规则 变量命名规则
2010/02/25 Javascript
jQuery AJAX实现调用页面后台方法和web服务定义的方法分享
2012/03/01 Javascript
scrollWidth,clientWidth,offsetWidth的区别
2015/01/13 Javascript
JS使用parseInt解析数字实现求和的方法
2015/08/05 Javascript
深入浅析JavaScript面向对象和原型函数
2016/02/06 Javascript
jquery 属性选择器(匹配具有指定属性的元素)
2016/09/06 Javascript
JS实战篇之收缩菜单表单布局
2016/12/10 Javascript
nodejs开发——express路由与中间件
2017/03/24 NodeJs
关于在vue-cli中使用微信自动登录和分享的实例
2017/06/22 Javascript
Vue.js列表渲染绑定jQuery插件的正确姿势
2017/06/29 jQuery
angular2 ng2 @input和@output理解及示例
2017/10/10 Javascript
JavaScript模块模式实例详解
2017/10/25 Javascript
Javascript网页抢红包外挂实现分享
2018/01/11 Javascript
Vue使用vux-ui自定义表单验证遇到的问题及解决方法
2018/05/10 Javascript
react native 文字轮播的实现示例
2018/07/27 Javascript
使用NestJS开发Node.js应用的方法
2018/12/03 Javascript
详解javascript对数组和json数组的操作
2019/04/15 Javascript
微信小程序实现侧边分类栏
2019/10/21 Javascript
微信小程序自定义模态弹窗组件详解
2019/12/24 Javascript
vant时间控件使用方法详解
2020/12/24 Javascript
[47:22]Mineski vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python模拟鼠标拖动操作的方法
2015/03/11 Python
Python 加密的实例详解
2017/10/09 Python
python里 super类的工作原理详解
2019/06/19 Python
通过自学python能找到工作吗
2020/06/21 Python
Timberland美国官网:全球领先的户外品牌
2016/08/15 全球购物
德国孕妇装和婴童服装网上商店:bellybutton
2018/04/12 全球购物
说一下mysql, oracle等常见数据库的分页实现方案
2012/09/29 面试题
Linux如何压缩可执行文件
2013/10/21 面试题
时尚休闲吧创业计划书
2014/01/25 职场文书
《猫》教学反思
2014/02/26 职场文书
2015年社区居委会工作总结
2015/05/18 职场文书
Vue + iView实现Excel上传功能的完整代码
2021/06/22 Vue.js