027.Mysql的in語句索引


還是慢查詢優化,mysql 5.7上抓到一個5s的查詢,沒有走到合理的索引。

對應的mybatis的sql片段如下

復雜的動態查詢,沒有分而治之,搞的組合條件。
結論性的規則,如下:

  • 確定值=,使用索引 track_num = (SELECT ... limit 1)
  • 字面量IN,使用索引 in (1,2,3)
  • 子查詢IN,不使用索引 receiver_id IN (SELECT ... )

優化 sql,使用 left join 代替 子查詢IN,優化后,執行時間 0.3s,
開啟<setting name="logImpl" value="STDOUT_LOGGING"/>,確認SQL輸出。

修改后截圖如下

而下面的修改,變更了查詢語義。

注意 AND (name = #{value} OR phone = #{value}) 放在 ONWHERE是有區別的。
on笛卡爾乘積之前,where笛卡爾乘積之后。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM