【问题标题】:Oracle Partition pruning not happeningOracle 分区修剪未发生
【发布时间】:2017-06-14 12:26:24
【问题描述】:

我有一个包含数百万条记录的事实表。该表在日期列上进行范围分区。

FACT_AUM (ACCOUNT_ID VARCHAR2(30),MARKET_VALUE NUMBER(20,6), POSTING_DATE DATE);

我有另一个临时表

ACCOUNT_TMP (ACCOUNT_ID VARCHAR2(30), POSTING_DATE DATE);

当我通过硬编码日期运行此查询时,我看到分区修剪发生并且结果很快回来

SELECT A.ACCOUNT_ID, SUM(A.MARKET_VALUE) FROM 
FACT_AUM A JOIN ACCOUNT_TMP B ON A.ACCOUNT_ID = B.ACCOUNT_ID 
AND A.POSTING_DATE=TO_DATE('30-DEC-2016',DD-MON-YYYY') GROUP BY 
A.ACCOUNT_ID;

当我运行以下命令时,我没有看到分区修剪并且查询一直在旋转

SELECT A.ACCOUNT_ID, SUM(A.MARKET_VALUE) FROM 
FACT_AUM A JOIN ACCOUNT_TMP B ON A.ACCOUNT_ID = B.ACCOUNT_ID 
AND A.POSTING_DATE = B.POSTING_DATE GROUP BY 
A.ACCOUNT_ID;

对此的任何见解都会有所帮助。

【问题讨论】:

  • 我不确定我是否可以在这个论坛中分享 DDL。我会看看我是否可以得到一个精简版并将相关部分发布在 DDL 上
  • 这两个查询的执行计划最好进一步调查。
  • 我检查了这两个查询的执行计划。具有硬编码日期的日期在过滤谓词中具有posting_date,partition_start 和partition_stop 具有特定的分区ID。但是有join操作的partition_start为1,partition_end为146(因为表有146个分区)
  • CREATE TABLE FACT_AUM ( SK_PRODUCT NUMBER, ACCOUNT_NUMBER VARCHAR2(30), CURRENCY_CODE VARCHAR2(5), TOTAL_SHARES NUMBER, NAV NUMBER, ..... .... )
  • PARTITION BY RANGE ("POSTING_DT") PARTITION "PART_JAN_2010" VALUES LESS THAN (TO_DATE(' 2010-02-01 21:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN') PARTITION "PART_FEB_2010" VALUES LESS THAN (TO_DATE(' 2010-03-01 21:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) PARTITION "PART_MAR_2010" VALUES LESS THAN (TO_DATE(' 2010-04-01 21:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) .... .... PARTITION "PART_DEC_2016" VALUES LESS THAN (TO_DATE(' 2017-01-01 21:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))

标签: oracle


【解决方案1】:

Oracle 在您对值进行硬编码时使用了分区修剪,因为 Oracle 认为在那里进行分区修剪会受益。

当您将事实表与临时表(我将其改写为临时表)连接时,Oracle 将无法猜测它必须命中哪些分区才能计算答案。请注意,Oracle 将评估暂存表中可用值的范围。

但除非您提供所涉及的表的统计信息,否则我无法深入讨论表排序和表连接等更重要的主题。为了快速修复,请使用订单提示或嵌套循环提示。

【讨论】:

    猜你喜欢
    • 2017-11-01
    • 2011-03-18
    • 2011-01-18
    • 2012-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    相关资源
    最近更新 更多