【发布时间】:2010-03-25 10:17:57
【问题描述】:
我需要一些帮助来提升这个 SQL 语句。执行时间约为 125 毫秒。
在我的程序运行期间,此 sql(更好:不同表的结构相同的 sql)
将被调用 300.000 次。
表中的平均行数约为 10.000.000 行,并且每天都会添加带有时间戳的新行(更新/插入)。对这个特定的导出程序感兴趣的数据位于最近 1-3 天。也许这对创建索引很有帮助。我需要的数据是给定 id 的当前有效行和获取更新的先行数据行(如果存在)。
我们使用 Oracle 11g 数据库和 Dot.Net Framework 3.5
要提升的 SQL 语句:
select
ID_SOMETHING, -- Number(12)
ID_CONTRIBUTOR, -- Char(4 Byte)
DATE_VALID_FROM, -- DATE
DATE_VALID_TO -- DATE
from
TBL_SOMETHING XID
where
ID_SOMETHING = :ID_SOMETHING
and ID_CONTRIBUTOR = :ID_CONTRIBUTOR
and DATE_VALID_FROM <= :EXPORT_DATE
and DATE_VALID_TO >= :EXPORT_DATE
order by
DATE_VALID_FROM asc;
在这里,我为这个查询上传了当前的Explain-Plan。
我不是数据库专家,所以我不知道哪种索引类型最适合此要求。 我已经看到可以应用许多不同的可能索引类型。 也许 Oracle 优化器提示也很有帮助。
有没有人有调整这个 sql 的好主意或者可以指出正确的方向?
【问题讨论】:
标签: sql oracle performance