国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Mysql - Mysql數據庫表中為什么有索引卻沒有提高查詢速度

Mysql數據庫表中為什么有索引卻沒有提高查詢速度

2022-02-24 22:11慕楓技術筆記 Mysql

你有沒有想起過為什么明明再數據庫中有索引,但是查詢速度卻并沒有希望的那樣快?本篇文章將帶給你答案,跟小編一起看看吧

背景

時間過得太快了,春節假期感覺光速般就結束了,轉眼間就要繼續搬磚上班了。緊接著很快就要進入金三銀四的求職面試高峰期,程序猿小楓還沒有找到令自己感到滿意的工作。就算是在過年放假期間也在拼命的準備技術面試,這不他又梳理了下之前面試過程中面試官經常問到的關于數據庫方面的一道面試題,我們來一起幫小楓看看有沒有遺漏的地方吧。

面試題目——問題

面試官:看你的簡歷中有提到過曾經進行過索引優化的工作,那我就問問你,假設數據庫表中有索引,但是進行SQL數據查詢還是很慢,這種情況下應該怎么分析查詢慢的原因?

分析

在進行數據庫查詢的時候,我們都知道索引可以加快數據查詢的效率。但是在實際的業務場景下,經常會遇到即使在表中增加了索引,但是同樣還是會出現數據查詢慢的問題。這就需要具體分析數據查詢慢的具體原因到底是什么了。

首先需要進行確認的就是SQL語句中對應的條件查詢中字段有沒有建立索引。雖然面試官說了有索引,但是不一定SQL語句中的查詢字段有建立索引,所以第一步應該進行SQL中的字段索引確認。如果沒有建立對應的索引可以先嘗試下建立索引再進行查詢。如果已經有了索引,查詢的字段也是索引字段,那么就要考慮下是不是出現了索引失效的情況。下面我們再具體分析下,看看在哪些場景下會出現索引失效的情況。

索引失效場景

在分析索引失效場景之前,我們必須要清楚索引結構的特點是什么。關于Mysql的數據庫索引結構在之前的文章中已經進行了詳細的分析,可以參見之前的文章。

Mysql數據庫索引面試題(程序員基礎技能)

我們來看下Mysql數據庫索引的結構特點:

Mysql數據庫表中為什么有索引卻沒有提高查詢速度

 這里以user_info這張表來作為分析的基礎,在user_info這張表上,我們分別創建了idx_name以及idx_phone二級索引以及idx_age_address聯合索引。

CREATE TABLE IF NOT EXISTS `user_info` (
 `id` bigint(20) NOT NULL AUTO_INCREMENT,
 `name` VARCHAR(20) NOT NULL,
 `gender` int(2) NOT NULL,
 `age` int(10) NOT NULL,
 `phone_number` VARCHAR(20) NOT NULL,
 `address` VARCHAR(40) NOT NULL,
  PRIMARY KEY ( `id` ),
  KEY `idx_name`(`name`),
  KEY `idx_phone`(`phone_number`),
  KEY `idx_age_address`(`age`,`address`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
  • 1、字段類型不匹配導致的索引失效

進行SQL數據查詢的時候,where條件字段類型與實際表中字段類型不匹配的時候,Mysql會進行隱式的數據類型轉換,而類型轉換會使用到內置函數,導致在進行數據查詢的時候并沒有使用索引。我們可以使用explain命令查看sql語句。可以看的出來在key欄中,對應的值為null,說明并沒有使用索引進行查詢。 

Mysql數據庫表中為什么有索引卻沒有提高查詢速度

 但是如果在按照phone_number字段為字符串類型進行查詢的時候,Mysql沒有進行隱式的類型轉換,所以最終還是走了索引。

Mysql數據庫表中為什么有索引卻沒有提高查詢速度

  • 2、被索引字段使用了表達式計算

在where中條件使用了條件表達式的時候,數據表中的索引就失效了,實際是因為Mysql需要將索引字段取出來之后再進行表達式的條件判斷,因而進行了全表掃描,導致索引失效。

Mysql數據庫表中為什么有索引卻沒有提高查詢速度

  • 3、被索引字段使用了內置函數

索引字段實際上是依賴于整個B+索引樹的遍歷,而索引樹的遍歷又依賴于索引樹底層葉子節點的有序性。索引保存的是索引列的原始值,如果經過函數計算,Msql的解釋器無法判斷計算后的索引在原來的索引樹上是否可以被索引到,因此它就直接放棄使用索引查詢了。

Mysql數據庫表中為什么有索引卻沒有提高查詢速度

  • 4、like使用了%X模糊匹配

使用左模糊匹配以及左右模糊匹配都會導致索引失效,但是使用右模糊匹配,還是可以走索引查詢的。

Mysql數據庫表中為什么有索引卻沒有提高查詢速度

由于B+樹按照索引值進行排序的,實際是按照最左前綴進行比較,而使用了%作為最左前綴,Mysql無法判斷其有序性,因此只能進行全表掃描查詢。

Mysql數據庫表中為什么有索引卻沒有提高查詢速度

  • 5、索引字段不是聯合索引字段的最左字段

如果數據庫表中有聯合索引的話,我們在SQL查詢語句中使用的索引字段又不是聯合索引的最左字段,那么就會導致索引失效。

Mysql數據庫表中為什么有索引卻沒有提高查詢速度

實際上在Mysql中的索引檢索是遵循最左匹配原則的,同時B+索引樹的葉子節點的有序性也是建立都在最左匹配原則之上,而上述的4、5兩種情況實際違反了最左匹配原則,因此Mysql執行器則無法使用對應的索引進行檢查查詢。

Mysql數據庫表中為什么有索引卻沒有提高查詢速度

  • 6、or分割的條件,如果or左邊的條件存在索引,而右邊的條件沒有索引,不走索引

因為 OR 的含義就是兩個只要滿足一個即可,因此只有一個條件列進行了索引是沒有意義的,只要有條件列沒有進行索引,就會進行全表掃描,因此索引的條件列也會失效。

Mysql數據庫表中為什么有索引卻沒有提高查詢速度

  • 7、in、not in可能會導致索引失效

Mysql數據庫表中為什么有索引卻沒有提高查詢速度

這里需要說明的是使用in以及not in走不走索引,實際和Mysql的版本以及表中的數據量有關系,在8.0之后的版本是走索引的。

總結

本文根據面試官的存在索引但是出現數據查詢慢的問題為出發點,總結了幾種索引失效的場景,希望在大家平時項目開發時遇到類似的問題可以有對應的問題排查方向。導致索引失效的場景歸結起來實際就是在索引使用上面存在瑕疵最終導致了索引失效的情況,這就像我們小時候打拳皇97一樣,遙感和按鈕的組合如果姿勢不對,就沒辦法放出我們希望的大招。小楓的求職面試之路還在繼續,我們一起期待下次小楓還會遇到怎樣的面試問題吧。

到此這篇關于Mysql數據庫表中為什么有索引卻沒有提高查詢速度的文章就介紹到這了,更多相關Mysql 數據庫表索引內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/Diamond_Tao/article/details/122804061

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 国产精品久久久久久婷婷天堂 | 国产亚洲欧美一区二区 | 午夜在线观看 | 欧美亚洲一区 | 成人免费在线播放 | 久久久www成人免费无遮挡大片 | 黑人巨大精品欧美黑白配亚洲 | 久久亚洲国产精品日日av夜夜 | 日韩成人在线观看 | 国产精品一区二区免费 | 国产精品久久久久久久天堂 | 久久久久av| 亚洲清色| 精品亚洲一区二区三区四区五区 | 日韩免费一区二区 | 日本v在线观看 | 网站毛片 | 欧美日韩高清不卡 | 久久久免费电影 | jizzxxx日本 | 伊人伊人伊人 | 免费观看一级特黄欧美大片 | 欧美在线综合 | 欧美日韩中文字幕 | 色播视频网站 | 爱干在线| 国内毛片毛片 | 一级黄片毛片 | 国产精品99 | 夫妻午夜影院 | 亚洲天堂中文字幕 | 中文字幕三区 | 91亚洲国产成人久久精品网站 | 欧美日韩激情 | 亚洲视频黄 | 日韩欧美国产一区二区三区 | 五月天婷婷激情 | 欧美一区在线观看视频 | 日本久久网 | 综合色网站 | 久久久久久久国产 |