sql索引優化-force index


  本周有個優化sql任務,有一條sql慢查詢,起初看了下感覺並沒有什么問題,但是就是出現了慢查詢,后來細究后發現了問題:

  sql:select id, name, mtime, ....  from a force index (mtime)  where id >= ? and mtime >= ? and mtime <= ? and name = ? and .....  order by id limit ?

  現狀:因為是客戶表,表字段比較多,此表共有10個索引,然后此sql語句用了其中2個索引,因為考慮到sql的索引選擇器可能會選擇錯誤,所以使用了force index,強制使用索引,此sql強制了使用修改時間:mtime。

  初看時沒問題的,但是后來根據腳本邏輯發現,根據時間篩選出范圍,然后再根據id,每次查200條進行邏輯處理,第一次sql查詢的時候用mtime索引確實沒問題,但是后續每次循環取200條數據,並沒有用到主鍵id索引,這樣就造成了慢查詢。

  修改:force index (mtime) 改為 force index (mtime,primary),這樣可以讓sql選擇器自己再進行選擇,是使用mtime更加快還是用id主鍵更快

  ps 拓展:1、ignore index 忽略某個索引。 2、force index 強制使用某個索引,如果這個索引沒有用上,則會全表掃描。  3、use index 建議使用某個索引,如果這個索引沒用上,會再尋找其它索引


免責聲明!

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



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