使用绑定变量进行Oracle分区修剪

时间:2010-07-19 16:40:44

标签: sql performance oracle partitioning

我有一个大的(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字符串中的日期,以便分区修剪正常工作。

有更好的方法吗?

1 个答案:

答案 0 :(得分:7)

我认为您不应该看到绑定变量的实际性能差异 - 您应该看到“PARTITION RANGE ITERATOR PARTITION:KEY KEY ...”的执行计划步骤,这意味着Oracle将确定启动和停止分区在执行时。