我们有一个如下所示的merge语句,而不是索引范围扫描,它正在进行全表扫描。它成功地运行到最后,直到表被修改后,添加了3-4个新列,然后开始执行全表扫描。
我们有7个具有相同更改的类似表,即增加了3-4列,但当我们重新构建索引时,它解决了问题,除了一个表。
有没有人能解释一下?
-Nagu
发布于 2011-05-27 22:01:26
尝试收集有关表的统计信息。最好的方法是使用DBMS_STATS包中的例程。最简单的做法是简单地调用DBMS_STATS.GATHER_DATABASE_STATS,不指定参数(即对所有参数使用默认值)。然而,这需要一段时间。要收集单个表的统计信息,可以使用DBMS_STATS.GATHER_TABLE_STATS。您需要给'ownname‘和'tabname’参数赋值;因此,如果您感兴趣的表名为"MY_SCHEMA.MY_TABLE“,则对DBMS_STATS.GATHER_TABLE_STATS的调用将如下所示
DBMS_STATS.GATHER_TABLE_STATS('MY_SCHEMA', 'MY_TABLE');
这个例程还有其他参数,但缺省值可以很好地工作。
如果数据库仍然坚持对您感兴趣的表进行全表扫描,这可能意味着您的表上没有索引,数据库认为该索引可能对满足查询有用。如果您可以发布查询的代码,并告诉我们您在表上有哪些索引存在问题,我们可能会提出其他建议。
分享和享受。
https://stackoverflow.com/questions/5510321
复制相似问题