什么情況下會造成索引失效?

2.3.4. 索引失效

  1. 對索引使用左或者左右模糊匹配

使用左或者左右模糊匹配的時候,也就是 like %xx 或者 like %xx% 這兩種方式都會造成索引失效。但是如果前綴是確定的那么就可以使用到索引,例如 name like '許%'。

因為索引 B+ 樹是按照「索引值」有序排列存儲的,只能根據前綴進行比較。如果使用 name like '%許' 方式來查詢,查詢的結果可能是「小許、大許、老許」等之類的,存儲引擎不知道從哪個索引值開始比較,于是就只能通過全表掃描的方式來查詢。

  1. 對索引使用函數

查詢條件中對索引字段使用函數,就會導致索引失效。因為索引保存的是索引字段的原始值,而不是經過函數計算后的值,自然就沒辦法走索引了。

MySQL 5.7 開始,索引特性增加了函數索引,即可以針對函數計算后的值建立一個索引,也就是說該索引的值是函數計算后的值,所以就可以通過掃描索引來查詢數據。

-- 對 length(name) 的計算結果建立一個名為 idx_name_length 的索引。
alter table t_user add key idx_name_length ((length(name)));
  1. 對索引進行表達式計算

在查詢條件中對索引進行表達式計算,也是無法走索引的。例如,下面代碼

explain select * from t_user where id + 1 = 10;

如果把查詢語句的條件改成 where id = 10 - 1,這樣就不是在索引字段進行表達式計算了,于是就可以走索引查詢了。

因為索引保存的是索引字段的原始值,而不是 id + 1 表達式計算后的值,所以無法走索引,只能通過把索引字段的取值都取出來,然后依次進行表達式的計算來進行條件判斷,因此采用的就是全表掃描的方式。

個人覺得這種方式完全可以不使用沒必要這么麻煩。

  1. 對索引隱式類型轉換

索引字段是字符串類型,查詢條件種輸入的參數是整型,在執行計劃里發現這條語句會走全表掃描。

索引字段是整型類型,查詢條件中的輸入的參數是字符串,不會導致索引失效,還是可以走索引掃描。

-- 例1、索引是字符串 參數是整型
select * from t_user where phone = 1300000001;
-- 例2、索引是整型 參數是字符串
select * from t_user where id = '1';

因為MySQL 在遇到字符串和數字比較的時候,會自動把字符串轉為數字,然后再進行比較

-- 例1
select * from t_user where CAST(phone AS signed int) = 1300000001;-- 例2
select * from t_user where id = CAST("1" AS signed int);

例1,CAST 函數是作用在了 phone 字段,而 phone 字段是索引,也就是對索引使用了函數!

例2,索引字段并沒有用任何函數,CAST 函數是用在了輸入參數,所以可以走索引掃描的。

  1. 組合索引非最左匹配

如果創建了一個 (a, b, c) 組合索引,因為有查詢優化器,所以 a 字段在 where 子句的順序并不重要。

如果查詢條件是以下這幾種,因為不符合最左匹配原則,所以就無法匹配上聯合索引,聯合索引就會失效:

  • where b=2;
  • where c=3;
  • where b=2 and c=3;

比較特殊的查詢條件:where a = 1 and c = 3 ,符合最左匹配嗎?

MySQL 5.5 的話,前面 a 會走索引,在聯合索引找到主鍵值后,開始回表,到主鍵索引讀取數據行,Server 層從存儲引擎層獲取到數據行后,然后在 Server 層再比對 c 字段的值。

從 MySQL 5.6 之后,有一個索引下推功能,可以在存儲引擎層進行索引遍歷過程中,對索引中包含的字段先做判斷,直接過濾掉不滿足條件的記錄,再返還給 Server 層,從而減少回表次數。

在組合索引的情況下,數據是按照索引第一列排序,第一列數據相同時才會按照第二列排序。

如果我們想使用聯合索引中盡可能多的列,查詢條件中的各個列必須是組合索引中從最左邊開始連續的列。如果我們僅僅按照第二列搜索,肯定無法走索引。

  1. WHERE 子句中的 OR

在 WHERE 子句中,如果在 OR 前的條件列是索引列,而在 OR 后的條件列不是索引列,那么索引會失效。只有一個條件列是索引列是沒有意義的,只要有條件列不是索引列,就會進行全表掃描,所以需要兩個條件都是索引列。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/12403.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/12403.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/12403.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SpringBoot 中 zip 文件解壓工具類

SpringBoot 中 zip 文件解壓工具類 zip 文件解壓&#xff08;不支持密碼&#xff09; 相關 Maven 依賴 <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.6</version>…

練習題(2024/5/14)

1四數相加 II 給你四個整數數組 nums1、nums2、nums3 和 nums4 &#xff0c;數組長度都是 n &#xff0c;請你計算有多少個元組 (i, j, k, l) 能滿足&#xff1a; 0 < i, j, k, l < nnums1[i] nums2[j] nums3[k] nums4[l] 0 示例 1&#xff1a; 輸入&#xff1a;n…

代碼隨想錄訓練營Day28:貪心算法06

1.738單調遞增的數字 貪心策略&#xff1a;如果strNum[i]<strNum[i-1]那么strNum[i] 9,strNum[i-1]--;//比如87對應的最大的單調遞增的就是79. 具體實現&#xff1a; 對于遇到小于的情況&#xff1a;如果strNum[i]<strNum[i-1]那么strNum[i] 9,strNum[i-1]--;遍歷順…

linux phpstudy 重啟命令

[rootLinuxWeb phpstudy]# ./system/phpstudyctl restart 查看命令 1) phpstudy -start 啟動小皮面板 2) phpstudy -stop 停止小皮面板 3) phpstudy -restart 重啟小皮面板 4) phpstudy -status 查詢面板狀態 5) phpstudy -in…

OFDM802.11a的FPGA實現(十五)短訓練序列:STS(含Matlab和verilog代碼)

原文鏈接&#xff08;相關文章合集&#xff09;&#xff1a;OFDM 802.11a的xilinx FPGA實現 1.前言 在之前已經完成了data域數據的處理&#xff0c;在構建整個802.11a OFDM數據幀的時候&#xff0c;還剩下前導碼和signal域的數據幀&#xff0c;這兩部分的內容。 PLCP的前導部分…

Nodejs筆記2

模塊化 模塊化初體驗 模塊暴露數據 導入模塊 fs 寫絕對路徑 require寫相對路徑不會受到影響 ./../不能省略 js 和json文件后綴可以省略 如果存在 命名相同的js和json文件&#xff0c;優先導入js文件 導入文件夾時的情況 require導入模塊的基本流程 commonJS模塊…

其它高階數據結構①_并查集(概念+代碼+兩道OJ)

目錄 1. 并查集的概念 2. 并查集的實現 3. 并查集的應用 3.1 力扣LCR 116. 省份數量 解析代碼1 解析代碼2 3.2 力扣990. 等式方程的可滿足性 解析代碼 本篇完。 寫在前面&#xff1a; 此高階數據結構系列&#xff0c;雖然放在⑤數據結構與算法專欄&#xff0c;但還是作…

【數據可視化01】matplotlib實例介紹4之六邊形分箱圖

目錄 一、引言二、實例介紹 一、引言 hexbin是一個二維直方圖&#xff0c;其中箱子是六邊形&#xff0c;顏色表示每個箱子內的數據點數。 二、實例介紹 import matplotlib.pyplot as plt import numpy as np# Fixing random state for reproducibility np.random.seed(19680…

服務器利用率的神器腳本

在服務器管理的過程中&#xff0c;了解服務器的各項性能指標是至關重要的。無論是CPU的負載情況&#xff0c;內存使用情況&#xff0c;還是硬盤的存儲空間以及TCP連接狀態&#xff0c;這些都是我們判斷服務器健康狀態和性能的重要依據。然而&#xff0c;手動一項項去檢查這些指…

【MySQL】Mysql——安裝指南(Linux)

MySQL8.0.26-Linux版安裝 1. 準備一臺Linux服務器 云服務器或者虛擬機都可以; Linux的版本為 CentOS7; 2. 下載Linux版MySQL安裝包 3. 上傳MySQL安裝包 4. 創建目錄,并解壓 mkdir mysqltar -xvf mysql-8.0.26-1.el7.x86_64.rpm-bundle.tar -C mysql5. 安裝mysql的安裝包 …

pip鏡像源

1.1 清華大學 https://pypi.tuna.tsinghua.edu.cn/simple 1.2 阿里云 https://mirrors.aliyun.com/pypi/simple/ 1.3 網易 https://mirrors.163.com/pypi/simple/ 1.4 豆瓣 https://pypi.douban.com/simple/ 1.5 百度云 https://mirror.baidu.com/pypi/simple/ 1.6 中科大 ht…

uniapp vue 獲取天氣數據

獲取當前地址&#xff0c;通過高德天氣數據&#xff0c;來展示天氣溫度風度等數據 //獲取天氣 getWeather(){// 獲取天氣預報uni.request({url: https://restapi.amap.com/v3/weather/weatherInfo, data: {city: 長沙,// extensions:all,key: xxxxxxxxxx//自己的高德密鑰key},…

2024OD機試卷-轉盤壽司 (java\python\c++)

題目:轉盤壽司 題目描述 壽司店周年慶,正在舉辦 優惠活動 回饋新老客戶。 壽司轉盤上總共有 n 盤壽司,prices[i] 是第 i 盤壽司的價格, 如果客戶選擇了第 i 盤壽司,壽司店免費贈送客戶距離第 i 盤壽司最近的下一盤壽司 j,前提是 prices[j] < prices[i],如果沒有滿足…

RAG 面向 LLM: 基于檢索增強的大語言模型調研

摘要 作為 AI 領域最先進的技術之一,檢索增強生成(RAG)技術可以提供可靠和最新的外部知識,為眾多任務提供巨大的便利。特別是在 AI 生成內容(AIGC)時代,RAG 中檢索強大的提供額外知識的能力使得檢索增強生成能夠輔助現有生成式 AI 生產高質量輸出。最近,大語言模型(LLM)在語言…

Zoho CRM企業成長的智能引擎,智能化銷售自動化

數字化時代&#xff0c;客戶體驗已成為企業競爭的核心要素。卓豪Zoho CRM&#xff0c;作為全球領先的SaaS云端客戶關系管理平臺&#xff0c;正引領著一場企業運營模式的變革&#xff0c;助力超過25萬家企業跨越180多個國家&#xff0c;實現客戶互動與業務增長的無縫對接。讓我們…

廣汽原車控制系統CAN協議控制汽車基本信息獲取及數據應用

在現代汽車工業的迅速發展中&#xff0c;車輛控制系統的智能化和網絡化已成為提升汽車性能的關鍵。廣汽作為中國汽車行業的佼佼者&#xff0c;其在原車通信網絡方面也取得了顯著的成就。特別是廣汽原車CAN&#xff08;Controller Area Network&#xff09;協議的應用&#xff0…

2024OD機試卷-分割均衡字符串 (java\python\c++)

題目:分割均衡字符串 題目描述 均衡串定義: 字符串 中只包含兩種字符,且這兩種字符的個數相同。 給定一個均衡字符串,請給出可分割成新的均衡子串的最大個數。 約定:字符串中只包含大寫的 X 和 Y 兩種字符。 輸入描述 字符串的長度:[2, 10000]。 給定的字符串均為均…

添磚Java之路(其六)——通過集合制作的學生信息管理系統

目錄 前言&#xff1a; 源碼&#xff1a; 前言&#xff1a; 我對于集合的理解&#xff0c;感覺就類似于順序表這樣的數據結構&#xff0c;然后他存儲的數據不能是基本類型&#xff0c;如果要用也只能用對應基本數據的包裝類。 對于集合有很多方法&#xff0c;我的建議就是去…

【運維】nvidia-smi錯誤信息:Failed to initialize NVML: Driver/library version mismatch

【運維】錯誤信息&#xff1a;Failed to initialize NVML: Driver/library version mismatch 是因為Nvidia的驅動沖突的原因 本地部署&#xff1a;本地Docker容器部署&#xff0c;本地驗證后打包鏡像 遠程部署&#xff1a;鏡像部署阿里云PAI EAS 因為在容器中安裝了驅動版本&a…

短視頻最后的慢動作怎么做:成都鼎茂宏升文化傳媒公司

短視頻最后的慢動作怎么做&#xff1a;技巧與創意實踐指南 在短視頻創作的浩瀚宇宙中&#xff0c;慢動作特效如同一顆璀璨的星辰&#xff0c;為作品增添無限魅力與情感深度。它不僅能夠放大細節之美&#xff0c;還能延長關鍵瞬間&#xff0c;引發觀眾強烈的情感共鳴。短視頻最…