慢sql_查詢條件加了函式導致索引失效
阿新 • • 發佈:2022-03-31
問題背景:生產環境查詢很慢,通過skywaking全鏈路監控發現/get請求相關的一個sql為慢sql,慢的原因在於查詢欄位使用了加解密函式( CONVERT(AES_DECRYPT(UNHEX(`欄位名`),'金鑰') USING utf8) )
以下為驗證過程:
【先往表target_regulator_tx_info中插入資料用來測試查詢操作,其中欄位sender為加密欄位】
>>>>>>>>>>>>>>>>>>先看看沒有索引時的查詢情況<<<<<<<<<<<<<<<<<<<<<<
可以看到:沒有索引走的全表掃描。順便看一下查詢條件使用函式時的耗時:
可以看到:用sender這個欄位查詢時,在同樣沒有索引的條件下,使用函式比不使用函式慢
>>>>>>>>>>>>>>>>>>DONE<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
>>>>>>>>>>>>>>>>>>再來看看加上索引時的查詢情況<<<<<<<<<<<<<<<<<<<<<<
可以看到:加了索引後此時走的索引掃描。順便看一下查詢條件使用函式時的耗時:
可以看到: 即使這個欄位加了索引,這種條件下查詢時依然是那麼慢
>>>>>>>>>>>>>>>>>>DONE<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
優化:修改sql,查詢條件不進行函式運算,查詢條件的值進行加解密運算後,再進行查詢