相同的SQL但不同的解释计划

时间:2011-02-10 04:16:26

标签: sql oracle performance setting

我在两个具有相同索引集和表大小的不同环境中运行相同的SQL(下面)。 但他们给了我两个不同的解释计划(attached

  1. 使用合并加入笛卡尔 - 非常慢
  2. 使用PX协调器/ PX发送/ PX接收 - 非常快
  3. 查询:

    SELECT *
    FROM SIEBEL.S_PARTY PRTY, SIEBEL.S_CONTACT CONT, HPQ_IF_ENTERPRISE_DIRECTORY ED,SIEBEL.S_BU BU 
    WHERE PRTY.ROW_ID = CONT.PAR_ROW_ID 
    AND BU.ROW_ID(+)=CONT.BU_ID 
    AND CONT.EMP_NUM IS NOT NULL 
    AND ED.HPSTATUS NOT IN ('Terminated', 'Retired', 'Deceased') 
    AND ED.EMPLOYEENUMBER = UPPER (LPAD (CONT.EMP_NUM, 8, '0')) 
    AND (SUBSTR(ED.MODIFYTIMESTAMP,1,14) >= '19800101' OR ED.MODIFYTIMESTAMP IS NULL)
    

    知道造成这种差异的可能原因是什么?第二个解释计划(PX事物)是什么意思?

    请注意,我不是在寻找更改SQL查询(在生产中冻结)。

    非常感谢。

3 个答案:

答案 0 :(得分:8)

PX表示parallel processing。由于会话设置(或者如果其他数据库是不同版本或版本),可能在其他数据库上不可用。

答案 1 :(得分:4)

查询计划不仅取决于表大小或索引,还取决于许多其他因素,主要是表,其列和索引的统计信息。这些统计数据包括聚类因子等因素,这可能会对计算出的成本产生很大影响。

此外,不同的系统统计信息,优化器参数,表结构(例如分区与非分区)和数据库块大小都会发挥作用,环境之间的最微小差异可能导致不同的计划受到青睐。 / p>

答案 2 :(得分:3)

桌子有不同的学位吗?在两种环境中检查此查询:

select table_name, degree from all_tables where table_name in ('S_PARTY', 'S_CONTACT', 'HPQ_IF_ENTERPRISE_DIRECTORY','S_BU');