2013-02-21 115 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