【发布时间】:2014-09-25 10:05:51
【问题描述】:
我有一个 oracle sql 查询,它附有访问计划。如何在不更改 sql 查询的情况下更改访问计划。我认为 oracle 有存储 sql id 和 plan id 的数据库表,将 plan id 更新为新的 plan id 将强制 sql 查询使用不同的解释计划。
我使用的是 Oracle 10,在这种情况下,我不想触及现有的查询。我将编写另一个带有提示的查询并创建所需的解释计划。现在我将为解释计划使用新标记并将其附加到原始 sql id。这是如何做到这一点的逻辑,但我不知道所有表需要更新才能实现这一点。第一步:SQLI_D1 -> PLAN_ID1;第二步:SQL_ID2 -> PLAN_ID2;第三步:SQL_ID1 -> PLAN_ID2
【问题讨论】:
-
您为什么要这样做 - 因为您认为 Oracle 选择了次优计划? Oracle 是否拥有制定合理计划所需的所有信息——尤其是统计数据是否最新?或者,如果您使用 10g,您是否可能遭受绑定变量偷看? (这在 11g 上不是问题)。您可以向优化器提供提示,但这会更改语句,并且通常有点难以隐藏潜在问题。
标签: oracle