性能測試四十二:sql案例之聯合索引最左前綴
阿新 • • 發佈:2019-01-29
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案例之聯合索引最左前綴