成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面試官問我MySQL索引失效怎么排查?懵逼了

數據庫 MySQL
索引為什么會失效呢?失效之后會導致什么樣的后果呢?這一節,我們利用當下的問題,也就是千萬級的訂單表查詢居然需要耗費3s的時間,通過這個問題我們來一探究竟。

前 言

我們講解了sql優化的一般流程,不管是優化join語句、where語句、聚合函數還是排序操作,核心在于利用索引來優化sql語句,但是,大家以為我們為字段創建了索引之后,索引就一定會生效嗎?

當然不是的,因為索引可能會失效。

那索引為什么會失效呢?失效之后會導致什么樣的后果呢?這一節,我們利用當下的問題,也就是千萬級的訂單表查詢居然需要耗費3s的時間,通過這個問題我們來一探究竟。

目前為止,我們已經初步確定問題原因,說白了就是sql沒有正常使用到索引,因為單表千萬級的數據,B+樹基本也就是三到四層,那么如果正常使用到索引的話,幾十毫秒sql就執行完畢了。

所以這條sql,肯定是沒有使用到索引,說白了就是索引失效了,此時就會發生大量的磁盤IO,最終就會導致sql查詢時間達到了3s。

索引失效會導致什么后果?

首先我們先來看下,索引失效的話,會導致什么后果呢?我們用之前文章出現過的圖來舉例

我們可以看到,一個數據表中的數據,是通過多個數據頁的方式存儲起來的,并且數據頁之間是通過雙向鏈表的方式連接起來的 。

就以訂單表舉例,如果訂單表中的數據達到上千萬數據的級別了,這個時候,存放訂單數據的數據頁數量,就不是100個數據頁這么少了,可能會有幾萬甚至幾十萬個數據頁。

如果我們不用上索引的話,就意味著我們要面臨加載幾萬甚至幾十萬個數據頁的風險,這個過程同時會導致大量的磁盤IO,是非常耗費性能,影響我們查詢的效率的。

所以,我們也可以知道,為什么隨著表中的數據量越來越大,就會導致查詢的速度會越來越慢了。

而索引在這個時候,就變得越來越重要了,關鍵在于,我們怎樣優化我們的sql語句,讓sql語句查詢數據的時候,盡量利用索引來查詢數據。

sql優化案例實戰

體驗下無索引的查詢效率

在進行sql優化之前,我們先來體驗下沒有索引時,我們sql的一個查詢效率。

(1)無索引的查詢效率

當前表的數據量為2500W,查詢時間已經消耗了65秒

(2)無索引的執行計劃

通過explain分析該查詢sql的執行計劃,我們可以看到這條sql進行了全表掃描。

(3) sql執行慢會發生什么連鎖反應?

模擬并發請求時,會發現由于sql查詢時間過長,導致數據庫連接數快速被消耗完,最終導致后面的sql再執行的時候就被拒絕連接了。

體驗下有索引的查詢效率

(1)創建索引

我們可以給order_no字段加上索引,如下圖:

(2)有索引的查詢效率

為order_no字段添加上索引后再試試查詢,看看效率有多大的提高。

我們可以發現同樣的sql在無索引和有索引的情況,查詢效率差距是非常大的。所以在遇到大表查詢慢的場景不妨先查看一下查詢字段是否有添加上合適的索引。

(3)有索引的執行計劃

通過執行計劃可以看到加索引后,只掃描了一行就找到了需要查詢的數據

sql優化案例:隱式轉換導致索引失效

(1)正常使用到索引的情況

在項目中訂單號的類型為String,當我們SQL語句編寫正確的情況,查詢效率是很快的

(2) 隱式轉換導致索引失效

當我們錯誤的使用數值類型的訂單號去進行查詢時,我們看一下查詢時間。

通過圖中的執行情況,執行效率確是天差地別的,查詢時間竟然需要整整24秒!

(3)通過explain查看索引失效的執行計劃

通過explain分析這條SQL的執行計劃,我們會發現雖然order_no字段上我們設置了索引,但這條查詢依然進行了全表掃描,說白了就是根本沒有用到索引,因此查詢效率才會大減。

結束語

最后,簡單做一個說明,那就是實際的sql優化是比較復雜的,可能還會涉及到鎖、內存和網絡,我們這里只是列舉了sql優化中需要注意的2個點而已,而這2個點只是sql優化的一小部分。之所以提出來這2個點,主要是為了達到拋磚引玉的效果,就是遇到問題時,大家首先要聚焦在sql優化這里,而不是說先考慮一些高大上的解決方案。?


責任編輯:武曉燕 來源: 今日頭條
相關推薦

2020-07-31 08:06:39

MySQL遞歸查詢

2022-04-10 18:10:24

CURD鏈表

2021-12-02 08:19:06

MVCC面試數據庫

2024-07-23 08:21:19

2023-02-16 08:10:40

死鎖線程

2020-04-16 08:22:11

HTTPS加解密協議

2021-05-20 08:54:16

Go面向對象

2010-08-23 15:06:52

發問

2022-05-24 08:03:28

InnoDBMySQL數據

2021-07-09 10:11:34

Redis云數據技術

2025-05-28 00:00:01

MySQL場景索引

2021-06-03 08:55:54

分布式事務ACID

2023-01-26 02:16:17

2021-02-06 09:21:17

MySQL索引面試

2020-12-03 07:39:50

HashMap底層數據

2022-09-29 07:30:57

數據庫索引字段

2020-08-10 07:58:18

異步編程調用

2021-05-08 07:53:33

面試線程池系統

2021-05-19 08:17:35

秒殺場景高并發

2021-09-29 19:17:51

編碼URLEncodeGBK
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一级片免费在线观看 | 久热免费 | 国产a爽一区二区久久久 | 日韩电影中文字幕 | 欧美色性| 久久日韩精品一区二区三区 | 久久免费精品 | av黄色在线播放 | 国产精品视频一区二区三区不卡 | a欧美| 亚洲网址在线观看 | 中文字幕在线观看视频一区 | 精品自拍视频在线观看 | 国产精品久久久久久久久免费樱桃 | 精品国产99 | 国产欧美日韩一区 | 国产精品久久久久一区二区三区 | 日本精品一区二区三区在线观看视频 | 亚洲国产一区在线 | 午夜三区 | 久久大陆| 国产精品18hdxxxⅹ在线 | 欧美日韩精品一区二区三区视频 | 91大神在线看| 一区二区精品 | 黄色网址免费看 | 精品国产青草久久久久96 | 区一区二区三在线观看 | 亚洲一区二区在线视频 | 免费黄色成人 | 一区二区三区精品视频 | 国产精品一区二区三 | 天天草天天操 | 久久激情av| 国产网站在线免费观看 | 午夜电影合集 | 日日夜夜天天综合 | 天堂一区 | 国产精品久久久久久一区二区三区 | 激情婷婷 | 国产91久久久久蜜臀青青天草二 |