Oracle 选择查询优化
Posted
技术标签:
【中文标题】Oracle 选择查询优化【英文标题】:Oracle Select Query optimization 【发布时间】:2013-09-01 11:50:15 【问题描述】:我正在对我的数据执行一些 sql 语句,我有以下情况。
Select 语句如下所示
select *
from t1, t2
where t1.id = t2.t1_id
t1.c1 = 'X' and t1.c2 in ('Y', 'Z')
运行解释计划,我看到 col2 过滤的成本为 11(带有过滤谓词的表访问)和 col1 1(表访问索引)。
如何降低在 col2 上的搜索成本?我应该在查询中添加任何提示吗?
提前致谢,
【问题讨论】:
请将解释计划粘贴到问题中。 ...以及真正的查询。 【参考方案1】:我更喜欢查询的 ANSI 语法:
select *
from t1 join
t2
on t1.id = t2.t1_id
where t1.c1 = 'X' and t1.c2 in ('Y', 'Z');
考虑在t1(c1, c2, id)
和t2(t1_id)
上建立索引。第一个索引应该用于从t1
获取行。第二个应该加快加入t2
。
编辑:
根据 David 的评论,t1(c1, c2)
上的索引可能会稍微好一些。
【讨论】:
通过 select * 从两个表中获取所有列,我认为 t1 上的索引也可能是 (c1, c2)。 @DavidAldridge 。 . .这是一个有趣的观点。有可能(但我不知道)使用索引中的id
,单独的索引将用于连接,稍后会出现其他列。但是,Oracle 可能会先获取页面,然后再进行连接。
我很确定它会首先访问表索引,COMPRESS 也可能有用。以上是关于Oracle 选择查询优化的主要内容,如果未能解决你的问题,请参考以下文章