【后端數據庫】MySQL 索引生效/失效規則 + 核心原理

?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;揭示存儲架構優化的關鍵技巧…