我在两个具有相同索引集和表大小的不同环境中运行相同的SQL(下面)。 但他们给了我两个不同的解释计划(attached)
查询:
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查询(在生产中冻结)。
非常感谢。
答案 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');