生產環境一個like模糊匹配SQL優化

SELECT s.* FROM pre_common_member s WHERE s.`username` LIKE('%植物大戰殭屍%') LIMIT 100;

like後面接'%關鍵字%' 這樣是用不到索引的,會導致全表掃描,這條SQL查詢耗時,見下圖:

wKioL1MR7vySzResAASWnYlf4hQ422.jpg

耗時:27.89秒

----------------------------------------------------------------------------------------

優化方案:

一、如果模糊查詢不要求很準確,可以修改爲:

SELECT s.* FROM pre_common_member s WHERE s.`username` LIKE('植物大戰殭屍%') LIMIT 100;

like '關鍵字%'這樣是可以用到索引的,這條SQL查詢耗時,見下圖:

wKioL1MR70mgTHJkAAT-goO_rTc863.jpg

耗時:0秒


二、如果模糊查詢要求很準確,可以修改爲:

select s.* FROM pre_common_member s join
(SELECT uid FROM pre_common_member WHERE username LIKE('%植物大戰殭屍%') LIMIT 100)tmp
on s.uid=tmp.uid;

這條SQL查詢耗時,見下圖:

wKiom1MR77TTidgbAAS6zdxflYo367.jpg

耗時:9.17秒



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章