浅谈mysql增加索引不生效的几种情况

作者:涯一涯二涯三 时间:2024-01-25 20:34:43 

增加索引可以提高查询效率。

增加索引就是增加一个索引文件,存放的是数据的地址,类似与我们文档的目录,在查找过程中可以不用从书的内容查找,直接根据目录对应的页码查找。索引是根据地址查找。
创建索引,索引使用的数据结构也有很多种。常见的是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会判断是否需要使用索引;

来源:https://blog.csdn.net/weixin_40197494/article/details/100035943

标签:mysql,增加索引
0
投稿

猜你喜欢

  • SQL Server数据库对于应用程序的关系

    2010-09-08 09:42:00
  • Python中集合创建与使用详解

    2022-04-30 05:29:42
  • 吴恩达机器学习练习:神经网络(反向传播)

    2021-12-13 05:13:25
  • golang 网络框架之gin的使用方法

    2023-07-19 02:35:37
  • PHP登录(ajax提交数据和后台校验)实例分享

    2024-04-28 09:43:41
  • 段正淳的css笔记(3)标题右侧“更多”的实现

    2007-11-01 21:55:00
  • WEB2.0网页制作标准教程(8)CSS布局入门

    2007-09-11 13:21:00
  • Python利用正则表达式从字符串提取数字

    2021-03-22 22:52:39
  • python借助ChatGPT读取.env实现文件配置隔离保障私有数据安全

    2022-12-26 17:54:13
  • Golang 实现 Redis系列(六)如何实现 pipeline 模式的 redis 客户端

    2024-05-13 10:44:23
  • Python基础教程之异常详解

    2022-02-08 05:48:49
  • 微信小程序之多文件下载的简单封装示例

    2023-10-19 21:10:06
  • python 教程实现 turtle海龟绘图

    2022-03-19 10:45:35
  • django框架实现模板中获取request 的各种信息示例

    2023-08-31 05:16:41
  • 扫盲大讲堂:mysql出错的代码解析及解答

    2009-09-05 10:08:00
  • 8 行 Node.js 代码实现代理服务器

    2024-04-22 22:37:34
  • Django 解决开发自定义抛出异常的问题

    2023-03-05 12:43:55
  • Python cookbook(数据结构与算法)对切片命名清除索引的方法

    2023-10-31 02:27:35
  • Golang并发利器sync.Once的用法详解

    2024-04-25 15:12:06
  • python设置中文界面实例方法

    2023-08-30 18:56:30
  • asp之家 网络编程 m.aspxhome.com