提示 oracle 在子查询上使用索引——Oracle SQl
Posted
技术标签:
【中文标题】提示 oracle 在子查询上使用索引——Oracle SQl【英文标题】:Hint oracle to use indexes on the subquery -- Oracle SQl 【发布时间】:2011-08-17 19:41:20 【问题描述】:我有一个查询如下
select *
from
( select id,sum(amt) amt from table_t group by id
) t inner join table_v v on (v.id = t.id)
order by t.amt desc;
table_t 没有索引,有 738,000 行,table_v 在 id 上有索引,有 158,000 行。
查询当前在 10 秒内获取结果。
explain 查询计划显示全表扫描。我怎样才能提高这里的性能?
如果我在 table_t 的 id 上添加索引会有帮助。因为我在子查询中使用它?
【问题讨论】:
【参考方案1】:如果您在(id,amt)
上有一个索引,您将最小化分组/求和过程中的工作(因为它可以读取索引)。如果两列都可以为空,那么您可能需要添加“其中 id 不为空”,以便它使用索引。 [后面加入 id
暗示了这一点,但优化器可能无法推断出来。]
下一步将使用物化视图进行汇总,可能在(amt,id)
上使用索引(它可以用来避免排序)。但这会在提交或请求时或按计划的时间间隔刷新。如果您需要将此查询作为事务的一部分进行,这将无济于事。
索引和物化视图都会为表上的插入/更新/删除添加工作,但在此查询中保存工作。
【讨论】:
以上是关于提示 oracle 在子查询上使用索引——Oracle SQl的主要内容,如果未能解决你的问题,请参考以下文章