top
Loading...
7.2.15.如何避免表掃描
7.2.15. 如何避免表掃描

EXPLAIN的輸出顯示了當MySQL使用表掃描來解決查詢時使用的所有類型列。這通常在如下條件下發生:

·         表很小,掃描表比查找關鍵字速度快。這對于少于10行并且行較短的表比較普遍。

·         ONWHERE子句中沒有適用的索引列的約束。

·         正用常量值比較索引列,并且MySQL已經計算到(基于索引樹)常數覆蓋了表的很大部分并且表掃描將會比較快。參見7.2.4節,“MySQL怎樣優化WHERE子句”。

·         你正通過另一個列使用一個低的集的勢的關鍵字(許多行匹配關鍵字)。在這種情況下,MySQL假設通過使用關鍵字它可能會進行許多關鍵字查找,表掃描將會更快。

對于小表,表掃描通常合適。對于大表,嘗試下面的技巧以避免優化器錯選了表掃描:

·         使用ANALYZE TABLE tbl_name為掃描的表更新關鍵字分布。參見13.5.2.1節,“ANALYZE TABLE語法”。

·         對掃描的表使用FORCE INDEX告知MySQL,相對于使用給定的索引表掃描將非常耗時。參見13.2.7節,“SELECT語法”。

·                SELECT * FROM t1, t2 FORCE INDEX (index_for_column)
·                    WHERE t1.col_name=t2.col_name

·         --max-seeks-for-key=1000選項啟動mysqld或使用SET max_seeks_for_key=1000告知優化器假設關鍵字掃描不會超過1,000次關鍵字搜索。參見5.3.3節,“服務器系統變量”。

作者:mysql.com
來源:http://dev.mysql.com/doc/refman/5.1/zh/optimization.html
北斗有巢氏 有巢氏北斗