Eos*_*rus 3 oracle indexing optimization primary-key
我们有一个应用程序,它生成一些临时表,然后处理数据.我真的无法控制应用程序创建它的方式以及后续的查询.我们注意到Oracle使用全表扫描而不是使用索引作为表的主键.如果它使用主键索引,则进程运行速度会快很多.
由于我无法控制应用程序生成的选择查询,因此无法使用提示并强制Oracle使用主键索引.是否有任何其他设置我可以在某处更改可能会强制Oracle使用临时表的主键索引?
查询不使用索引的两个最常见原因是:
如果您的查询选择了所有表或正在进行连接而没有在where子句等中提及主键,那么进行全面扫描的可能性会更快.没有查询和索引,最好是解释计划,也无法确定.
但是,我会建议你让你的DBA重新聚集 - 我希望,如果不是第一次聚集 - 桌面上的统计数据.使用dbms_stats.gather_table_stats
,估计百分比为25%+.
如果每次运行应用程序时都重新创建表,则在创建和生成主键后尝试收集统计信息.如果它们每次都被截断并重新填充,那么请让DBA重建它们和PK,然后收集统计信息,因为这可能会显着增加查询运行时间.
由于无法控制任何事情,我不知道如何以其他方式改善查询时间.