2013-02-21 41 views
0

考慮以下兩個查詢一個表,其中datecolumn被索引 -是否有oracle提示以特定順序執行where子句?

Q1: select * from table where datecolumn > sysdate - 5; 
Q2: select * from table where datecolumn > sysdate - 5 and datecolumn < sysdate - 1; 

Q1使用索引。但是,Q2以某種方式進行全表掃描。是否因爲oracle以某種方式首先選擇執行「datecolumn < sysdate - 1」?在那種情況下,是否有辦法執行涉及一列的where子句的執行順序?

+0

遇到這種事情時要做的第一件事就是爲兩個查詢獲得解釋計劃。這將有助於確定計劃更改的實際原因。 *然後*,您可以使用下面答案中給出的一種或多種技術 - 但出於更好的理由而不是「似乎有效」。 – 2013-02-22 07:49:57

回答

0

你可以指定一個索引提示,這樣的事情:

select /*+ INDEX (table datecolumn_ix)*/ 
     * 
    from table 
    where datecolumn > sysdate - 5 and datecolumn < sysdate - 1; 

詳情請參閱Oracle Index Hint