oracle10g,偶然發現,在where中對同一欄位限制兩遍后開銷更低,執行更快,比如有一個查詢
where in_date>=sysdate-300,
cost要1000多,如果用兩個
where in_date>=sysdate-300
and in_date>=sysdate-310
這樣cost只有幾百,查詢花的時間也比上面少,這是啥道理啊(ps,這個欄位有加入索引)
uj5u.com熱心網友回復:
看一下執行計劃uj5u.com熱心網友回復:
只有一條in_date>=sysdate-300時,不走索引,全表掃描,多加一條and in_date>=sysdate-310后走索引了uj5u.com熱心網友回復:
只寫 in_date>=sysdate-310,看看什么執行計劃。uj5u.com熱心網友回復:
看一下in_date>=sysdate-300和in_date>=sysdate-310的記錄數分別占總記錄的百分比是多少?uj5u.com熱心網友回復:
and交集后 in_date>=sysdate-300and in_date>=sysdate-310 就是 in_date>=sysdate-310,不走索引 可能是 in_date>=sysdate-300的量 大于總量的20%還是25(記不清了)。
uj5u.com熱心網友回復:
同意樓上,占比超過一定量的時候,ORACLE會選擇全表掃描,因為效率更高uj5u.com熱心網友回復:
是單獨in_date>=sysdate-300,不走索引,and兩個條件后才走索引
而已and交集后應該還是in_date>=sysdate-300吧,和原來一個條件是實際過濾是一樣的
uj5u.com熱心網友回復:
占比差不多,不光是300,換成sysdate-400與sysdate-600,400時不走索引,加上-600時兩個條件就走索引
uj5u.com熱心網友回復:
做一下表分析后再看看uj5u.com熱心網友回復:
分析了,還是一個日期條件不走索引,再加另一個日期就走索引
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/52480.html
標籤:基礎和管理
