如何避免表掃描 |
發(fā)布時間: 2012/8/30 17:22:31 |
· 表很小,掃描表比查找關(guān)鍵字速度快。這對于少于10行并且行較短的表比較普遍。
· 在ON或WHERE子句中沒有適用的索引列的約束。 · 正用常量值比較索引列,并且MySQL已經(jīng)計算到(基于索引樹)常數(shù)覆蓋了表的很大部分并且表掃描將會比較快。參見7.2.4節(jié),“MySQL怎樣優(yōu)化WHERE子句”。
· 你正通過另一個列使用一個低的集的勢的關(guān)鍵字(許多行匹配關(guān)鍵字)。在這種情況下,MySQL假設(shè)通過使用關(guān)鍵字它可能會進(jìn)行許多關(guān)鍵字查找,表掃描將會更快。 對于小表,表掃描通常合適。對于大表,嘗試下面的技巧以避免優(yōu)化器錯選了表掃描:
· 使用ANALYZE TABLE tbl_name為掃描的表更新關(guān)鍵字分布。· 對掃描的表使用FORCE INDEX告知MySQL,相對于使用給定的索引表掃描將非常耗時。參見13.2.7節(jié),“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告知優(yōu)化器假設(shè)關(guān)鍵字掃描不會超過1,000次關(guān)鍵字搜索。 本文出自:億恩科技【1tcdy.com】 服務(wù)器租用/服務(wù)器托管中國五強(qiáng)!虛擬主機(jī)域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |