5

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

  1. 使用 Merge Join Cartesian - 非常慢
  2. 使用 PX Coordinator / PX Send / PX RECEIVE -- 非常快

询问:

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 查询(在生产中冻结)。

非常感谢。

4

3 回答 3

8

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

于 2011-02-10T04:36:54.980 回答
4

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

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

于 2011-02-10T04:35:32.427 回答
3

这些表有不同的 DEGREE 吗?在两种环境中检查此查询:

select table_name, degree from all_tables where table_name in ('S_PARTY', 'S_CONTACT', 'HPQ_IF_ENTERPRISE_DIRECTORY','S_BU');
于 2011-02-10T04:40:19.987 回答