SQL 优化的核心 —— 什么时候能“走索引”,什么时候会“失效”。整理一个索引生效/失效规则 + 核心原理的全景图,帮助彻底理解。


🔑 MySQL 索引使用的核心原理

MySQL 使用 B+Tree 索引(最常见),特点是:

  • 数据在磁盘上是 有序存储 的。

  • 查询时会从根节点到叶子节点 二分查找

  • 只有满足 有序性 的条件才能利用索引,否则会退化成全表扫描。

所以,判断 SQL 是否能走索引的关键就是:WHERE 条件是否能利用索引的有序性


✅ 典型场景:会走索引

1. 精确匹配(==, IN

SELECT * FROM user WHERE id = 100;   -- 主键索引
SELECT * FROM user WHERE email IN ('a@xx.com','b@xx.com'); -- 普通索引

👉 等值查询最友好,100%用到索引。


2. 范围查询(BETWEEN, >, <, >=, <=

SELECT * FROM orders WHERE create_time BETWEEN '2024-01-01' AND '2024-12-31';

👉 范围条件能利用索引的有序性。


3. 前缀匹配(LIKE 'abc%'

SELECT * FROM article WHERE title LIKE '优化%';

👉 因为能从 abc 开头定位,所以可走索引。


4. 复合索引(最左前缀原则)

CREATE INDEX idx_user_name_age ON user(name, age);-- 能走索引:
SELECT * FROM user WHERE name = 'Tom';
SELECT * FROM user WHERE name = 'Tom' AND age = 20;

👉 使用复合索引时,必须从 最左字段开始连续使用


5. 覆盖索引 (Covering Index)

-- 索引: (user_id, create_time)
SELECT user_id, create_time FROM orders WHERE user_id = 10;

👉 查询列全部在索引里,不需要回表,效率更高。


❌ 索引失效场景:不会走索引

1. LIKE '%abc' / %abc% (左模糊)

SELECT * FROM article WHERE title LIKE '%优化';
SELECT * FROM article WHERE title LIKE '%优化%';

👉 无法确定开头位置,B+Tree 的有序性失效。


2. 索引列上做函数 / 运算

-- 函数
SELECT * FROM user WHERE YEAR(create_time) = 2024;-- 运算
SELECT * FROM user WHERE id + 1 = 10;

👉 MySQL 不能用索引里的有序值,只能逐行计算 → 全表扫描。


3. 隐式类型转换

-- id 是 int,但传了字符串
SELECT * FROM user WHERE id = '100';

👉 会触发类型转换,导致索引失效。


4. 使用 OR(混合索引列 vs 非索引列)

-- status 有索引,age 没有
SELECT * FROM user WHERE status = 1 OR age = 20;

👉 部分条件没索引 → 可能导致索引失效。

(解决办法:把 OR 改成 UNION ALL


5. 复合索引未遵循“最左前缀”

CREATE INDEX idx_name_age ON user(name, age);-- ❌ age 单独用不了索引
SELECT * FROM user WHERE age = 20;

6. 使用 !=<>NOT INNOT LIKE

SELECT * FROM user WHERE status != 1;
SELECT * FROM user WHERE email NOT LIKE 'a%';

👉 索引失效,大概率全表扫描。


7. 在索引字段上用 IS NULL / IS NOT NULL

  • IS NULL 可以走索引(但要看情况)。

  • IS NOT NULL 基本走不了索引。


📊 总结表:索引能不能走

SQL 场景是否走索引说明
= / IN 精确匹配最高效
范围查询(BETWEEN, <, >能利用索引有序性
LIKE 'abc%' 前缀匹配从开头开始匹配
LIKE '%abc' / %abc%破坏有序性
复合索引(遵循最左前缀)必须从最左列开始
索引列上函数 / 运算索引失效
隐式类型转换字符串 vs 数字要注意
!=<>NOT IN基本全表扫描
IS NULL✅(可能)能用,效果视情况
IS NOT NULL通常不走索引
覆盖索引查询字段全在索引里

🌟 核心记忆法

👉 索引利用的关键:有序性

  • 能从“开头”精准定位 → ✅ 走索引

  • 破坏有序性(函数、运算、模糊、NOT) → ❌ 索引失效


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/95284.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/95284.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/95284.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于 YOLOv11n 的无人机航拍小目标检测算法学习

基于 YOLOv11n 的无人机航拍小目标检测算法问题&#xff1a;无人机航拍图像中小目标检测面临尺度变化大导致的检测精度较低和推理速度较慢等 解决&#xff1a;在 C3k2 模块中引入可变形卷积&#xff08;DCN&#xff09;&#xff0c;增强模型在复杂背景下对 多尺度目标的特征提取…

第06章:map():数据变形金刚,想变什么变什么

文章目录map()基础&#xff1a;一对一的数据转换map()的工作原理方法引用让代码更简洁对象转换&#xff1a;实际业务应用用户信息转换示例特殊类型的map()&#xff1a;mapToInt、mapToLong、mapToDouble链式map()&#xff1a;多重转换map()与filter()组合&#xff1a;数据处理管…

197-200CSS3响应式布局,BFC

CSS3响应式布局-媒体查询举例<title>01.媒体查询_媒体类型</title><style>h1 {width: 600px;height: 400px;background-image: linear-gradient(60deg,red,yellow,green);font-size: 40px;color: white;text-shadow: 0 0 20px black;text-align: center;line…

[Android] UI进阶笔记:从 Toolbar 到可折叠标题栏的完整实战

学习 Android 开发的过程中&#xff0c;UI 控件往往是最直观也最容易踩坑的部分。本文整理了我在学习《第一行代码》后的实践笔记&#xff0c;涵盖 Toolbar、自定义标题栏、菜单、Snackbar、CoordinatorLayout、可折叠标题栏、SwipeRefreshLayout 下拉刷新、FloatingActionButt…

计算机网络---http(超文本传输协议)

1. HTTP的定义与核心属性 HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;是万维网&#xff08;WWW&#xff09;的核心通信协议&#xff0c;定义了客户端&#xff08;如浏览器、APP&#xff09;与服务器之间如何传输“超文本”&#xff08…

【qml-7】qml与c++交互(自动补全提示)

背景&#xff1a; 【qml-5】qml与c交互&#xff08;类型单例&#xff09; 之前记录过qml与c交互的方式&#xff0c;目前为止我使用的是“类型单例”方式。这些名字是我自己起的&#xff0c;只为说明问题&#xff0c;严谨的还是以手册为准。 “类型单例”方式时提到过自动补全…

网页提示UI操作-适应提示,警告,信息——仙盟创梦IDE

代码<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>原生动态提示框</title><style>…

第八篇 永磁同步电机控制-MTPA、MTPV

永磁同步电机控制系列课程&#xff1a; 第一篇 永磁同步电机控制-认识电机 第二篇 永磁同步电机控制-电机的分类 第三篇 永磁同步电机控制-硬件基础知识 第四篇 永磁同步电机控制-软件基础知识 第五篇 永磁同步电机控制-数学模型 第六篇 永磁同步电机控制-控制方法 第七…

JAVA:Spring Boot 集成 Temporal 实现订单处理系统

🛠 1、简述 在现代分布式系统中,订单处理涉及多步骤工作流(如库存扣减、支付确认、物流派单等)。为了确保这些步骤的 可靠性、可观测性 和 容错性,我们可以使用 Temporal 实现工作流管理。 本文将介绍如何在 Spring Boot 中集成 Temporal,并通过一个订单处理的实际案例…

服务器硬件电路设计之 SPI 问答(六):如何提升服务器硬件电路中的性能?如何强化稳定性?

在服务器 SPI 硬件设计中&#xff0c;通信性能&#xff08;如传输速率、数据吞吐量&#xff09;与稳定性&#xff08;抗干扰、误码率&#xff09;直接决定外设响应效率&#xff0c;需从硬件设计、参数配置、干扰抑制三方面系统优化。一、性能优化核心策略&#xff1a;根据 SPI …

Web 聊天室消息加解密方案详解

目录 ​编辑 一、Web 聊天室消息加解密需求与技术约束 1.1 核心安全需求 1.2 技术约束 二、主流消息加解密方案详解 2.1 方案 1&#xff1a;对称加密&#xff08;AES-256-GCM&#xff09; 2.1.1 方案概述 2.1.2 核心原理 2.1.3 实现步骤&#xff08;分场景&#xff09…

组合导航 | RTK、IMU与激光雷达组合导航算法:原理、实现与验证

RTK、IMU与激光雷达组合导航算法:原理、实现与验证 文章目录 RTK、IMU与激光雷达组合导航算法:原理、实现与验证 一、组合导航系统原理与数学模型 1.1 传感器特性与互补性分析 1.2 系统状态方程构建 1.3 多源观测方程设计 (1)RTK观测模型 (2)激光雷达观测模型 (3)多源观…

使用Cadence工具完成数模混合设计流程简介

众所周知&#xff0c;Cadence的Virtuoso是模拟设计领域的核心工具&#xff0c;市占率达到75%&#xff0c;随着近些年来Cadence在数字版图设计&#xff08;APR&#xff09;领域的崛起&#xff0c;invs&#xff0c;PVS等一众工具也都成了很多公司的首选后端流程工具。依照强强联合…

FunASR人工智能语音转写服务本地部署测试

前提条件&#xff1a;本机&#xff1a;windows11 &#xff0c;已安装docker1.下载镜像使用命令下载docker镜像docker pull registry.cn-hangzhou.aliyuncs.com/funasr_repo/funasr:funasr-runtime-sdk-online-cpu-0.1.13下载完成后&#xff0c;建立文件夹储存之后需要下载的模型…

Python OpenCV图像处理与深度学习

Python OpenCV图像处理与深度学习 1. Python OpenCV入门&#xff1a;图像处理基础 2. Python OpenCV开发环境搭建与入门 3. Python OpenCV图像处理基础 4. Python OpenCV视频处理入门 5. Python OpenCV图像几何变换入门 6. Python OpenCV图像滤波入门 7. Python OpenCV边缘检测…

C# SIMD编程实践:工业数据处理性能优化案例

性能奇迹的开始 想象一下这样的场景&#xff1a;一台精密的工业扫描设备每次检测都会产生200万个浮点数据&#xff0c;需要我们计算出最大值、最小值、平均值和方差来判断工件是否合格。使用传统的C#循环处理&#xff0c;每次计算需要几秒钟时间&#xff0c;严重影响生产线效率…

XHR 介绍及实践

What is it? XML(XMLHttpRequest) 是浏览器提供的一种用于前端页面和后端服务器进行异步通信的编程接口。它允许在不重新加载整个页面的情况下&#xff0c;与服务器交换数据并更新部分页面内容&#xff0c;是 AJAX 技术的核心。 What is it used for? 异步请求&#xff1a;在…

【量化回测】backtracker整体架构和使用示例

backtrader整体框架 backtrader 是一个量化回测的库&#xff0c;支持多品种、多策略、多周期的回测和交易。更重要的是可以集成 torch 等神经网络分析模块。Cerebro类是 backtrader 的核心。Strategy类、Broker和Sizer类都是由Cerebro类实例化而来。 整体流程 backtrade 自带的…

【python+requests】一键切换测试环境:Windows 下环境变量设置指南

一键切换测试环境&#xff1a;Windows 下环境变量设置指南教你如何通过一个命令让测试脚本自动识别不同环境的配置文件你是否遇到过这种情况&#xff1a;同一套测试脚本&#xff0c;需要在测试环境、开发环境、预发布环境、生产环境等多种配置中切换&#xff1f;每次都要手动修…

备份压缩存储优化方案:提升效率与节省空间的完整指南

在数字化时代&#xff0c;数据备份已成为企业运营的关键环节。本文将深入探讨备份压缩存储优化方案&#xff0c;从技术原理到实施策略&#xff0c;为您提供一套完整的存储空间节省与性能提升解决方案。我们将分析不同压缩算法的适用场景&#xff0c;揭示存储架构优化的关键技巧…