以下命令中最好做什么?
exec dbms_stats.gather_table_stats
dbms_stats.gather_schema_stats
哪一个提高了数据库性能?
答案 0 :(得分:5)
它们都提高了数据库性能(或者说,它们都收集将由oprtimiser使用的统计信息,可能提高性能)。 GATHER_SCHEMA_STATS收集模式中所有对象的统计信息。 GATHER_TABLE_STATS仅用于一个表。您可以在the documentation中阅读所有相关信息。
答案 1 :(得分:3)
两者。都不是。取决于。
“数据库表现”是什么意思?如果统计信息已过期,则收集现有表和索引的统计信息可能会有所帮助。但它们不是一个神奇的子弹,它将取代添加有用的索引以供问题查询使用。
更新一个表上的统计信息可能就是您的问题所需的全部内容。 更新所有索引列的统计信息可能是有序的。 或者这些可能不是您从性能角度处理的问题。好的索引不会帮助编写错误的查询。
在弄清楚如何修复之前,你需要弄清楚什么是特定的慢。当然,整个数据库都没有一个加速踏板 - 无论我们怎么想都有。
答案 2 :(得分:2)
Oracle自10g以来定期收集统计信息。您是否注意到标准聚会太罕见或不够详细?默认值为estimate_percent< 100可以导致10g的糟糕计划。
统计信息收集可能是您要应用的优化之一,但我们无法事先知道。在您扩充Oracle的默认统计信息收集之前,您将查找不会使用手动收集的统计信息选择的次优查询计划。
Cary Millsap撰写的优秀论文可能对您有所帮助:http://method-r.com/downloads/doc_details/44-thinking-clearly-about-performance