【发布时间】:2012-01-29 12:05:21
【问题描述】:
我们有一个应用程序可以生成一些临时表,然后处理数据。我真的无法控制应用程序创建此内容的方式以及所涉及的后续查询。我们注意到的是,Oracle 使用全表扫描而不是使用作为表主键的索引。如果它使用主键索引,则该过程将运行得更快。
由于我无法控制应用程序生成的选择查询,我无法使用提示并强制 Oracle 使用主键索引。是否有任何其他设置可以更改以强制 Oracle 对临时表使用主键索引?
【问题讨论】:
-
您能否再添加一个具有自动递增序列的列并将该列设置为主键列
-
我更喜欢 MSSQL,但强制查询的唯一方法是通过提示。从您的措辞中不清楚您是否可以控制临时表的创建。您确定正在创建 PK 吗?如果存在 PK / FK 关系,那么它们是否被声明(在 MSSQL 中,查询优化器使用它)?在合乎逻辑的情况下,我从来没有遇到过不使用 PK 的查询。
-
@BalamBalam 我无法控制临时表的创建。但是,我们确实检查以确保正在创建 PK。我不知道为什么查询优化器不使用它,这是一个奇怪的问题,因为我无法向查询添加任何提示。
-
@Emmanuel N 不幸的是,我无法控制新表的创建,所以我无法添加另一列
-
他们是否加入了您可以控制的表?确保您可以控制的表已正确索引并且没有碎片。确保他们正在建立统计数据。您可以使用您可以控制的表来构建统计信息。我怀疑这会解决任何问题,但它可能不会破坏任何东西。
标签: oracle optimization indexing primary-key