Oracle SQL 不同环境下相同查询的不同计划
Oracle SQL different plan for same query on different environments
两个非常相似的环境,相同的数据库结构,一个查询,两个执行计划:一个有嵌套循环和索引(快),另一个有散列连接和完全访问(慢)。
我应该执行哪些步骤来查找计划差异的原因?
- 确保两个环境中的数据库版本相同。:
SELECT * FROM V$VERSION;
然后检查您的 table 在两种环境中的统计数据:
SELECT TABLE_NAME, NUM_ROWS, AVG_ROW_LEN, SAMPLE_SIZE,
LAST_ANALYZED FROM DBA_TABLES WHERE TABLE_NAME = 'YOUR_TABLE_NAME';
如果统计数据不同,那么运行下面的脚本在两个环境中:
BEGIN
EXEC dbms_stats.gather_table_stats('YOUR_SCHEMA','YOUR_TABLE',cascade=>TRUE);
END;
两个非常相似的环境,相同的数据库结构,一个查询,两个执行计划:一个有嵌套循环和索引(快),另一个有散列连接和完全访问(慢)。
我应该执行哪些步骤来查找计划差异的原因?
- 确保两个环境中的数据库版本相同。:
SELECT * FROM V$VERSION;
然后检查您的 table 在两种环境中的统计数据:
SELECT TABLE_NAME, NUM_ROWS, AVG_ROW_LEN, SAMPLE_SIZE, LAST_ANALYZED FROM DBA_TABLES WHERE TABLE_NAME = 'YOUR_TABLE_NAME';
如果统计数据不同,那么运行下面的脚本在两个环境中:
BEGIN
EXEC dbms_stats.gather_table_stats('YOUR_SCHEMA','YOUR_TABLE',cascade=>TRUE);
END;