Oracle SQL 不同环境下相同查询的不同计划

Oracle SQL different plan for same query on different environments

两个非常相似的环境,相同的数据库结构,一个查询,两个执行计划:一个有嵌套循环和索引(快),另一个有散列连接和完全访问(慢)。

我应该执行哪些步骤来查找计划差异的原因?

  1. 确保两个环境中的数据库版本相同。:

SELECT * FROM V$VERSION;

  1. 然后检查您的 table 在两种环境中的统计数据:

    SELECT TABLE_NAME, NUM_ROWS, AVG_ROW_LEN, SAMPLE_SIZE, LAST_ANALYZED FROM DBA_TABLES WHERE TABLE_NAME = 'YOUR_TABLE_NAME';

  2. 如果统计数据不同,那么运行下面的脚本在两个环境中:

BEGIN EXEC dbms_stats.gather_table_stats('YOUR_SCHEMA','YOUR_TABLE',cascade=>TRUE); END;