1. 程式人生 > >24.MySQL優化Avoiding Full Table Scans

24.MySQL優化Avoiding Full Table Scans

介紹

當使用全表掃描時EXPLAIN 的type欄位輸出ALL。通常以下情況可能趨向於全表掃描:

  • 表很小,全表掃秒比使用索引掃描更快,這對於行少於10行且行長度較短的表來說很常見。
  • 當ON或者WHERE條件中沒有索引可以使用的條件時。
  • 將索引與常量值進行了比較,並且索引通過計算髮現,這個常量值覆蓋了整個表的大部分,通過全表掃描比索引掃描更快。
  • 使用的列的區分度較低(很多行匹配了鍵值),然後查詢索引的下一列,在這種情況下,可能需要對索引,這種情況下MYSQL可能通過關鍵字掃描需要掃描很多杆件自,所以表掃描更快。

對於小型表,表掃描通常是合適的,效能影響可以忽略不計。對於大型表,請嘗試以下技術以避免優化程式錯誤地選擇表掃描:

  • 使用更新的掃描表的鍵分佈, ANALYZE TABLE tbl_name。

  • 使用FORCE INDEX強制使用索引,告訴優化器使用表掃描比指定的索引掃描代價高很多。

      SELECT * FROM t1, t2 FORCE INDEX (index_for_column)
      WHERE t1.col_name=t2.col_name;
    
  • 啟用mysqld的與–max-seeks-for-key=1000 選項或使用SET max_seeks_for_key=1000告訴優化器:所有的索引都不會導致超過1000次的索引搜尋。