記MySQL一次關於In的優化

壹頁書發表於2017-02-06
MySQL版本:5.6.14
詳見MySQL技術內幕:SQL程式設計 102頁

files表記錄的是dfs系統中的檔案資訊.

有一批資料上傳出現錯誤,需要重新上傳.
錯誤檔案的範圍已經記錄在了test.files_20170206表中。

執行如下查詢,竟然很長時間沒有結果.

  1. select * from files t1 where (oldpath,flen) in (
  2.     select oldpath,max(flen) from files f where oldpath in
  3.         (select oldpath from test.files_20170206 )
  4.     group by oldpath
  5. )

使用explain extended 檢視執行計劃





原來的SQL,使用了Exists方式.

改寫SQL如下,實際上就是加了一層巢狀.

  1. select * from files t1 where (oldpath,flen) in (
  2.     select * from (
  3.         select oldpath,max(flen) from files f where oldpath in
  4.             (select oldpath from test.files_20170206 )
  5.         group by oldpath
  6.     ) a
  7. )



經過改寫之後,就符合了原來的預期,先將結果儲存為一個臨時表.然後通過臨時表再查資料.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-2133135/,如需轉載,請註明出處,否則將追究法律責任。

相關文章