cag*_*boy 4 sql oracle performance 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');
Run Code Online (Sandbox Code Playgroud)
...分区修剪工作正常...... optomiser能够意识到它只需要查看单个分区(在本例中为Q1 2009).EXPLAIN PLAN显示"PARTITION RANGE SINGLE"
但是,当我将此查询移动到PL/SQL并传入与变量相同的日期时,该计划显示为"PARTITION RANGE(ITERATOR)"... <optomiser>无法理解它只需要查看单个partiiton(可能是因为它在评估计划时没有实际值).
到目前为止,我发现的唯一解决方法是编写一个EXECUTE IMMEDIATE,包括SQL字符串中的日期,以便分区修剪正常工作.
有没有更好的办法?
我认为您不应该看到绑定变量的实际性能差异 - 您应该看到"PARTITION RANGE ITERATOR PARTITION:KEY KEY ..."的执行计划步骤,这意味着Oracle将在执行时确定启动和停止分区.