24.MySQL優化Avoiding Full Table Scans
阿新 • • 發佈:2018-12-21
介紹
當使用全表掃描時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次的索引搜尋。