索引失效的场景

简介: 本文结合项目经验,总结了索引失效的常见场景:违反最左前缀法则、范围查询右侧列失效、索引列进行函数运算、隐式类型转换、未加引号的字符串匹配及%开头的like查询。同时建议使用explain分析执行计划,关注key、type和extra字段,优化SQL性能。

必答内容:

好的,索引失效这个问题,确实是在项目开发中非常常见的一类问题。那我就结合我之前的项目经验来聊一下,之前遇到的一些索引失效的场景:

第一类呢,就是在联合索引使用的时候,违反最左前缀法则,比如查询的条件并不是从索引最左边的列开始的。

第二类呢,就是范围查询(非等值查询)右侧的列,不能使用索引。

第三类呢,就是在索引列上进行运算或函数操作,索引将失效。非常典型的,像我们基于substring这样的函数截取字段值。

以及如果在条件匹配时,需要进行隐式类型转换的时候。比如:where gender=1,而gender是char类型

这种字符串不加引号,虽然查也能查出来,但也会造成索引失效。还有像常见的,以 % 开头的like模糊匹配,索引也会失效。当然这样的场景很多啊,上面这几个只是比较常见的索引失效的场景,所以在项目开发中,编写SQL时,就要避免这些情况的发生。

进阶内容:

而对于索引是否生效,到底走哪个索引,以及具体SQL语句的执行性能到底怎么样。这个我们可以借助于explain 来查看sql语句的执行计划,具体问题具体分析。我们可以通过explain执行计划中的 key 来确定此次查询是否使用了索引,以及通过 type 来判定SQL的执行性能,一定要规避 type 为all全表扫描的情况,还有像 extra 的信息也需要关注一下。

相关文章
|
存储 SQL 关系型数据库
MySQL高级篇——索引失效的11种情况
索引优化思路、要尽量满足全值匹配、最佳左前缀法则、主键插入顺序尽量自增、计算、函数导致索引失效、类型转换(手动或自动)导致索引失效、范围条件右边的列索引失效、不等于符号导致索引失效、is not null、not like无法使用索引、左模糊查询导致索引失效、“OR”前后存在非索引列,导致索引失效、不同字符集导致索引失败,建议utf8mb4
MySQL高级篇——索引失效的11种情况
|
7月前
|
索引
HashMap 原理(方法执行流程)
以put方法为例,介绍HashMap的工作原理:先通过key的hashCode计算哈希值,并进行二次哈希提升分布均匀性;若数组未初始化则创建默认容量为16的数组;利用(n-1)&hash计算桶下标,确保高效定位;根据桶位状态分别处理:空位直接插入、链表遍历更新或尾插并判断树化、红黑树则按树逻辑新增;最后检查是否需扩容。
|
7月前
|
存储 弹性计算 人工智能
大模型应用开发
大模型应用开发需通过API与模型交互,企业可选择开放API、云平台或本地服务器部署。开放API使用便捷但存在安全与成本问题;云部署易维护但仍有隐私风险;本地部署安全性高、长期成本低,适合企业级应用,不建议个人电脑部署。
|
消息中间件 Java 开发者
Java中实现异步通知的重试机制
在分布式系统中,异步通知是服务间数据交换的重要方式。然而,网络波动或服务不稳定可能导致通知失败,因此设计一个可靠的重试机制至关重要。本文通过Java教程,基于Spring框架和RabbitMQ,详细讲解异步通知重试机制的实现。内容涵盖重试策略(如最大尝试次数、退避策略等)、环境搭建及代码示例,帮助开发者构建健壮的分布式系统。
400 9
|
7月前
|
Nacos 微服务
Nacos与Eureka的区别
Eureka与Nacos均支持服务注册发现、健康监测及集群部署,默认采用AP模式保障高可用。区别在于:Nacos心跳间隔更短(5秒),超时剔除更快,支持配置管理与服务变更广播推送,而Eureka仅提供注册中心功能,更新依赖定时任务。
|
7月前
|
Java Spring
Spring Boot配置的优先级
SpringBoot项目支持多种配置方式,主要包括配置文件(application.properties、yml、yaml)和外部配置(系统属性、命令行参数)。优先级由高到低为:命令行参数 > Java系统属性 > application.properties > .yml > .yaml。
|
7月前
|
关系型数据库 MySQL 数据库
什么是事务以及事务的四大特性
事务是数据库操作的基本单元,具备ACID四大特性:原子性、一致性、隔离性、持久性。并发事务可能引发脏读、不可重复读、幻读等问题,数据库通过不同隔离级别(如读已提交、可重复读、串行化)加以控制。MySQL默认采用可重复读级别,在保证数据一致性的同时兼顾性能,避免高隔离级别带来的性能损耗。
|
存储 负载均衡 容灾
MySQL数据库的分布式架构和数据分片方案
MySQL数据库的分布式架构和数据分片方案
|
Java Redis 开发者
【Spring Boot自动装配原理详解与常见面试题】—— 每天一点小知识(上)
【Spring Boot自动装配原理详解与常见面试题】—— 每天一点小知识
770 0
|
开发框架 Java 开发者
Spring Boot中的自动装配原理
Spring Boot中的自动装配原理
3901 1