【问题标题】:Oracle Partition Pruning with bind variablesOracle 分区修剪与绑定变量
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

    • 确实如此。没有发现这个。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2017-06-14
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 2012-04-17
    相关资源
    最近更新 更多