首页 > 数据库 >【Mysql】索引哪些情况会失效

【Mysql】索引哪些情况会失效

时间:2024-08-02 10:27:31浏览次数:13  
标签:顺序 Mysql 查询 索引 时候 使用 失效

索引失效场景

当使用索引列进行查询时,最终会到主键索引树查询对应的数据进行返回,理论上来说使用了索引列查询,能很好的提高查询效率,但是不规范的使用,会使索引失效。

1. 索引列使用函数

在索引列上做运算,比如使用函数,会导致mysql无法识别索引列,查询的时候就不会走索引了。不过mysql8开始,增加了索引函数来解决这个问题。

2. 不按照组合索引的顺序查询

在一个由多列构成的组合索引中,按照最左匹配原则,从索引的最左列开始顺序检索,否则不走索引。

在组合索引中,索引的存储结构是按照索引的顺序来存储的,因此在sql中也需要按照这个顺序来进行匹配,否则InnoDB无法识别索引导致索引失效。

有个特殊情况,比如表table中存在a,b两个列的组合索引,在查询时使用where b=1 and a=1进行查询时,虽然没有按照a,b的顺序进行查询,但是还是会走索引。MySQL的查询优化器会尝试找到最有效的索引使用方式。因此,即使你的查询条件是 where b=1 and a=1,MySQL仍然可以使用 (a, b) 索引来加速查询。

3. 隐式转换不走索引

当存在隐式转换的时候,比如索引列是字符串类型,但是查询的时候没有使用引号,mysql会自动进行类型转换,导致索引失效。

4. 在索引列使用!= 或者 not的时候

在索引列使用不等于号、not查询的时候,由于索引检索的效率会非常低,因此mysql引擎判断不走索引。

5. like通配符匹配后缀%xxx

索引列使用like通配符匹配后缀%XX的时候,由于不符合索引的最左匹配原则,所以也不走索引。但是反过来,如果通配符匹配的是前缀XXX%,符合最左匹配原则,则是走索引的。

6. 使用or连接查询的时候

在使用or查询的时候,如果or语句前后没有同时使用索引,那边索引也会失效。只有当or语句前后列都是索引列的时候,索引才会生效。

除了这些场景之外,对于多表连接查询的情况,连接顺序也会影响索引的使用。

索引不适合哪些场景

1. 数据量少的情况不适合建立索引

2. 更新非常频繁的情况不适合添加索引

3. 区分度低的列不适合添加索引(比如性别等)

标签:顺序,Mysql,查询,索引,时候,使用,失效
From: https://blog.csdn.net/weixin_40954799/article/details/140864135

相关文章

  • Langchain-Chatchat3.1——搜索引擎bing与DuckDuckGo
    Langchain-Chatchat3.1——搜索引擎bing与DuckDuckGo1.前提是咱们的Chatchat服务一起部署好了,可以参考Langchain-Chatchat3.1版本docker部署流程——知识库问答2.搜索引擎DuckDuckGo:该搜索引擎不需要key,但是需要全球上网服务,挂代理。pipinstall-Uduckduckgo_search......
  • 【Mysql】Docker下Mysql8数据备份与恢复
    目录【Mysql】Docker下Mysql8数据备份与恢复1创建Mysql容器2连接Mysql3Binlog检查3.1检查是否开启3.2mysql5.73.3mysql84备份数据库4.1容器里执行备份4.2宿主机执行备份4.3参数说明5定时备份!/bin/bash按shift+:输入wq【Mysql】Docker下Mysql8数据备份与恢复1......
  • MySQL优化insert 语句
    当进行数据INSERT的时候,可以考虑采用以下几种优化方式:(1)如果同时从同一客户插入很多行,应尽量使用多个值表的INSERT语句,这种方式将大大缩减客户端与数据库之间的连接、关闭等消耗,使得效率比分开执行的单个INSERT语的快(在大部分情况下,使用多个值表的NSERT语句能比单个INSERT语向......
  • Redis和Mysql如何保持数据一致性
    一般情况下,Redis是用来实现应用和数据库之间读操作得缓存层,主要目的是减少数据库IO,还可以提升数据的IO性能。当应用程序需要去读取某个数据时,会首先尝试去Redis里面加载,如果命中就直接返回,如果没有命中,就去从数据库中查询,查询到数据之后再把这个数据缓存到Redis里。 如果一......
  • MySQL高级——MySQL的储存过程
    目录一、什么是储存过程 二、变量定义2.1局部变量2.2用户变量(会话变量) 2.3系统变量 2.3.1全局变量2.3.2会话变量三、定义参数四、分支流程4.1if判断4.2case分支  五、循环流程5.1循环-while5.2循环-repeat 5.3循环-loop 六、游标 七、异常......
  • 5分钟掌握软件测试必会mysql数据库知识(数据类型和数据约束
    mysql常用数据类型mysql的常用数据类型,主要有四种,需要我们重点掌握。1整型int整型分成两类,一类是有符号的,就是负数,一类是无符号的,就是正整数。很多时候我们需要的就是无符号的。比如年龄。2小数decimal小数的设置需要我们特别去了解一下。例如:decimal(4,2)这是表示......
  • 安装多个mysql
    下载文件wgethttps://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.39-linux-glibc2.28-x86_64.tar.xz解压到目录在文件夹建立my.cnf配置文件[client]port=3309socket=/data/mysql83309/mysqld.sock[mysqld_safe]socket=/data/mysql83309/mysqld.sock[mysq......
  • pandas 数据帧索引:to_list() 与 tolist()
    我最近为某人编写了一个python脚本,其中我使用to_list()将pandas数据帧的索引转换为列表。然而,这对他们不起作用,因为他们得到:AttributeError:'Index'objecthasnoattribute'to_list'使用他们的Python解释器。我做了一些搜索,发现还有tolist()......
  • android.uid.system sendBroadcast失效的问题
    如果是系统应用android:sharedUserId="android.uid.system"报这个错 Callingamethodinthesystemprocesswithoutaqualifieduser:android.app.ContextImpl.sendBroadcast:1188android.content.ContextWrapper.sendBroadcast:解决添加如下权限<uses-permissionandroi......
  • MySQL 学习笔记 进阶(InnoDB引擎 下)
    InnoDB引擎 InnoDB引擎-事务原理-概述事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。一致性(Co......