【发布时间】:2011-03-18 00:24:31
【问题描述】:
我有一个大表(超过 150m 行),它使用 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');
...分区修剪工作正常... optomiser 能够意识到它只需要查看单个分区(在这种情况下是 2009 年第一季度)。 EXPLAIN PLAN 显示“PARTITION RANGE SINGLE”
但是,当我将此查询移至 PL/SQL 并传入与变量相同的日期时,计划显示为“PARTITION RANGE (ITERATOR)”... 验光师无法理解它只需要查看在单个分区(大概是因为它在评估计划时没有实际值)。
到目前为止,我发现的唯一解决方法是编写一个 EXECUTE IMMEDIATE 代码,包括 SQL 字符串中的日期,以便分区修剪正常工作。
有没有更好的办法?
【问题讨论】:
标签: sql performance oracle partitioning