MySQL系列-優化之like關鍵字
like關鍵字我們也是經常使用,用來模糊查詢使用者名稱,那麼like如何進行優化呢?這篇部落格就簡單討論一下like的優化,但是真實的生產環境要比這複雜多了。
1.%號不放最左邊 先建立表和索引。
然後進行查詢【explain select * from tb where name like 'e%';】
可以看到我們的查詢使用上了idx_name這個索引,因為我們的 'e%' 規定了只要以字元 'e' 開頭的name,所以MySQL使用上了我們建立的索引。
把sql修改一下在進行查詢【explain select * from tb where name like 'e%y_t';】
同樣使用上了建立的索引。
再來修改一下【explain select * from tb where name like '%e%';】
可以看到這個時候就無法使用索引了,開頭是不確定的,MySQL也無法進行優化了,只能掃描表了。
2.使用覆蓋索引 如果業務需要%就放開頭我們也沒辦法,一般情況需求都是這樣的,畢竟優化還是為業務服務的。
這個時候可以考慮使用覆蓋索引(關於覆蓋索引:MySQL系列-優化之覆蓋索引),假設業務需要通過name來獲取使用者的age的話,我們可以對name、age欄位建立複合索引。
建立複合索引idx_name_age:
執行sql【explain select name,age from tb where name like '%e%';】
可以看到,查詢是覆蓋索引的,起碼比全表掃描要好。
如果需要更多欄位的資料而不單單是age的話,可以進行兩次查詢,第一次通過name來獲取id(這一步是索引掃描),第二步拿獲取來的資料在進行id匹配查詢(這一步效率很高,ref或者const)。 --------------------- 來源:https://blog.csdn.net/ufo___/article/details/81164996