<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
問題分析:
在進行資料庫查詢的時候,我們都知道索引可以加快資料查詢的效率。但是在實際的業務場景下,經常會遇到即使在表中增加了索引,但是同樣還是會出現資料查詢慢的問題。這就需要具體分析資料查詢慢的具體原因到底是什麼了。
首先需要進行確認的就是 SQL 語句中對應的條件查詢中欄位有沒有建立索引。雖然說表中已經有索引,但是不一定 SQL 語句中的查詢欄位有建立索引,所以第一步應該進行 SQL 中的欄位索引確認。如果沒有建立對應的索引可以先嚐試下建立索引再進行查詢。如果已經有了索引,查詢的欄位也是索引欄位,那麼就要考慮下是不是出現了索引失效的情況。下面我們再具體分析下,看看在哪些場景下會出現索引失效的情況。
索引失效場景:
在分析索引失效場景之前,我們必須要清楚索引結構的特點是什麼。
我們再來看下 Mysql 資料庫索引的結構特點:
本文以 user_info 這張表來作為分析的基礎,在 user_info 這張表上,我們分別建立了 idx_name 以及 idx_phone 二級索引以及 idx_age_address 聯合索引。
進行 SQL 資料查詢的時候,where 條件欄位型別與實際表中欄位型別不匹配的時候,Mysql 會進行隱式的資料型別轉換,而型別轉換會使用到內建函數,導致在進行資料查詢的時候並沒有使用索引。我們可以使用 explain 命令檢視 sql 語句。可以看的出來在 key 欄中,對應的值為 null,說明並沒有使用索引進行查詢。
但是如果在按照 phone_number 欄位為字串型別進行查詢的時候,Mysql 沒有進行隱式的型別轉換,所以最終還是走了索引。
在 where 中條件使用了條件表示式的時候,資料表中的索引就失效了,實際是因為 Mysql 需要將索引欄位取出來之後再進行表示式的條件判斷,因而進行了全表掃描,導致索引失效。
索引欄位實際上是依賴於整個 B+索引樹的遍歷,而索引樹的遍歷又依賴於索引樹底層葉子節點的有序性。索引儲存的是索引列的原始值,如果經過函數計算,Mysql 的直譯器無法判斷計算後的索引在原來的索引樹上是否可以被索引到,因此它就直接放棄使用索引查詢了。
使用左模糊匹配以及左右模糊匹配都會導致索引失效,但是使用右模糊匹配,還是可以走索引查詢的。
由於 B+樹按照索引值進行排序的,實際是按照最左字首進行比較,而使用了 %作為最左字首,Mysql 無法判斷其有序性,因此只能進行全表掃描查詢。
如果資料庫表中有聯合索引的話,我們在 SQL 查詢語句中使用的索引欄位又不是聯合索引的最左欄位,那麼就會導致索引失效。
實際上在 Mysql 中的索引檢索是遵循最左匹配原則的,同時 B+索引樹的葉子節點的有序性也是建立在最左匹配原則之上,而上述的 4、5 兩種情況實際違反了最左匹配原則,因此 Mysql 執行器則無法使用對應的索引進行檢查查詢。
如果 or 左邊的條件存在索引,而右邊的條件沒有索引,不走索引
因為 OR 的含義就是兩個只要滿足一個即可,因此只有一個條件列進行了索引是沒有意義的,只要有條件列沒有進行索引,就會進行全表掃描,因此索引的條件列也會失效。
這裡需要說明的是使用 in 以及 not in 走不走索引,實際和 Mysql 的版本以及表中的資料量有關係,在 8.0 之後的版本是走索引的。
注:此處加了地址的索引。
本文總結了幾種索引失效的場景,希望在大家平時專案開發時遇到類似的問題可以有對應的問題排查方向。導致索引失效的場景歸結起來實際就是在索引使用上面存在瑕疵最終導致了索引失效的情況,這就像我們小時候打拳皇 97 一樣,遙感和按鈕的組合如果姿勢不對,就沒辦法放出我們希望的大招。總之需要一些經驗的積累,同時在寫完 SQL 的時候可以進行執行檢查,避免線上上出現索引失效的問題。
到此這篇關於為什麼Mysql 資料庫表中有索引還是查詢慢的文章就介紹到這了,更多相關Mysql 查詢慢原理內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45