我有一个大的(150米+行)表,使用DATE分区键将其分区为四分之一。
当我使用类似......
之类的东西查询表格时SELECT *
FROM LARGE_TABLE
WHERE THE_PARTITION_DATE >= TO_DATE('1/1/2009', 'DD/MM/YYYY')
AND THE_PARTITION_DATE < TO_DATE('1/4/2009', 'DD/MM/YYYY');
...分区修剪工作正常......光学系统能够意识到它只需要查看单个分区(在本例中为2009年第1季度)。 EXPLAIN PLAN显示“PARTITION RANGE SINGLE”
但是,当我将此查询移动到PL / SQL并传入与变量相同的日期时,该计划显示为“PARTITION RANGE(ITERATOR)”...
到目前为止,我发现的唯一解决方法是编写一个EXECUTE IMMEDIATE,包括SQL字符串中的日期,以便分区修剪正常工作。
有更好的方法吗?
答案 0 :(得分:7)
我认为您不应该看到绑定变量的实际性能差异 - 您应该看到“PARTITION RANGE ITERATOR PARTITION:KEY KEY ...”的执行计划步骤,这意味着Oracle将确定启动和停止分区在执行时。