浅谈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 相关文章推荐
52条SQL语句教你性能优化
May 25 MySQL
MySQL 全文索引使用指南
May 25 MySQL
如何设计高效合理的MySQL查询语句
May 26 MySQL
MySQL连表查询分组去重的实现示例
Jul 01 MySQL
MySQL去除重叠时间求时间差和的实现
Aug 23 MySQL
mysql下的max_allowed_packet参数设置详解
Feb 12 MySQL
MySQL创建表操作命令分享
Mar 25 MySQL
MySQL中IO问题的深入分析与优化
Apr 02 MySQL
详解MySQL的主键查询为什么这么快
Apr 03 MySQL
MySQL外键约束(Foreign Key)案例详解
Jun 28 MySQL
mysql sock文件存储了什么信息
Jul 15 MySQL
MySQL索引失效十种场景与优化方案
May 08 MySQL
mysql联合索引的使用规则
为什么代码规范要求SQL语句不要过多的join
详解MySQL多版本并发控制机制(MVCC)源码
MySQL快速插入一亿测试数据
MySQL8.0.18配置多主一从
Jun 21 #MySQL
MySQL中日期型单行函数代码详解
如何搭建 MySQL 高可用高性能集群
Jun 21 #MySQL
You might like
简单的PHP留言本实例代码
2010/05/09 PHP
解析php中const与define的应用区别
2013/06/18 PHP
PHP中的print_r 与 var_dump 输出数组
2016/06/13 PHP
简单实用jquery版三级联动select示例
2013/07/04 Javascript
动态加载iframe时get请求传递中文参数乱码解决方法
2014/05/07 Javascript
使用angular写一个hello world
2015/01/23 Javascript
JS实现根据用户输入分钟进行倒计时功能
2016/11/14 Javascript
浅谈js数组和splice的用法
2016/12/04 Javascript
Bootstrap模态框案例解析
2017/03/05 Javascript
微信小程序 设置启动页面的两种方法
2017/03/09 Javascript
详解Nodejs之npm&amp;package.json
2017/06/15 NodeJs
微信小程序 rich-text的使用方法
2017/08/04 Javascript
node.js中路由,中间件,ge请求和post请求的参数详解
2017/12/26 Javascript
jQuery中ajax获取数据赋值给页面的实例
2017/12/31 jQuery
使用Vue构建可重用的分页组件
2018/03/26 Javascript
JavaScript中遍历的十种方法总结
2020/12/15 Javascript
Javascript实现关闭广告效果
2021/01/29 Javascript
[02:08]DOTA2英雄基础教程 马格纳斯
2014/01/17 DOTA
[59:44]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 paiN vs iG
2018/03/31 DOTA
python enumerate函数的使用方法总结
2017/11/15 Python
python 发送和接收ActiveMQ消息的实例
2019/01/30 Python
python字典改变value值方法总结
2019/06/21 Python
python读取dicom图像示例(SimpleITK和dicom包实现)
2020/01/16 Python
关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)
2020/02/20 Python
python数据库开发之MongoDB安装及Python3操作MongoDB数据库详细方法与实例
2020/03/18 Python
pycharm配置安装autopep8自动规范代码的实现
2021/03/02 Python
使用html2canvas实现将html内容写入到canvas中生成图片
2020/01/03 HTML / CSS
Java程序员面试题
2016/09/27 面试题
航空大学应届生求职信
2013/11/10 职场文书
《小白兔和小灰兔》教学反思
2014/02/18 职场文书
医德医魂心得体会
2014/09/11 职场文书
劳资员岗位职责
2015/02/13 职场文书
2015高中教师个人工作总结
2015/07/21 职场文书
2016高校自主招生自荐信范文
2016/01/28 职场文书
python 管理系统实现mysql交互的示例代码
2021/12/06 Python
pytorch中的 .view()函数的用法介绍
2022/03/17 Python