1. 程式人生 > >性能測試四十二:sql案例之聯合索引最左前綴

性能測試四十二:sql案例之聯合索引最左前綴

src ima 響應 性能測試 但是 意義 slow 必須 情況

聯合索引:一個索引同時作用於多個字段

聯合索引的最左前綴:

A、B、C3個字段--聯合索引

這個時候,可以使用的查詢條件有:A、A+B、A+C、A+B+C,唯獨不能使用B+C,即最左側那個字段必須匹配到

聯合索引最左前綴如果匹配不到,會造成索引失效,對性能影響非常大,所以聯合索引的順序很重要

看一下案例

技術分享圖片

Unique:

這種情況,單個cardNO、course、sex均允許重復,但是當這3個字段組到一起以後,就不允許任何兩個重復,這裏為了設計特別場景,把sex移到索引字段的最前面

技術分享圖片

接口:http://localhost:8080/PerfTeach/SlowQuery?cardNO=10009&course=Math

技術分享圖片

由於數據庫裏面,cardNO和course是意義對應的,所以需要把數據庫裏面的數據導出來

技術分享圖片

技術分享圖片技術分享圖片技術分享圖片技術分享圖片技術分享圖片

由於這個需要一一對應,所以在jmeter中創建CSV_read函數

技術分享圖片技術分享圖片

10個線程跑600秒

響應時間:1300多左右

技術分享圖片

TPS:20多

技術分享圖片

TOP查看:mysql占的最多

技術分享圖片

看慢查詢的日誌,在不斷的寫數據進去

技術分享圖片

用tail命令看一下

技術分享圖片

分析一下這條語句,type又是ALL了

技術分享圖片

因為之前建的索引,第一個字段是sex,而sql裏面沒有用到sex,只有cardNO和course,即出現的是B+C的情況

這種情況的解決方法,就是換索引裏面字段的順序:

技術分享圖片

type變為ref了

ref:非唯一性索引掃描,或只使用了聯合索引的最左前綴(性能居中)

技術分享圖片

再壓一下

TPS:220左右,提升了接近10倍

技術分享圖片

響應時間:130毫秒左右,差不多是原來的十分之一

技術分享圖片

TOP:CPU使用率降下來了

技術分享圖片

性能測試四十二:sql案例之聯合索引最左前綴