当前位置:  开发笔记 > 数据库 > 正文

需要帮助调优sql-query

如何解决《需要帮助调优sql-query》经验,为你挑选了1个好方法。

我需要一些帮助来提升这个SQL语句.执行时间约为125毫秒.
在我的程序运行期间,这个sql(更好:用于不同表的结构相同的sqls)
将被称为300.000次.

表中的平均行数约为10.000.000行,每天将添加新行(更新/插入)和时间戳.这个特定出口计划的有趣数据在过去的1-3天内.也许这对创建索引很有帮助.我需要的数据是给定id的当前有效行和获取更新的forerunner datarow(如果存在).

我们使用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;

在这里,我上传了此查询的当前解释计划.

我不是数据库专家,所以我不知道哪种索引类型最适合这个要求.我已经看到可以应用许多不同的可能索引类型.也许Oracle Optimizer Hints也很有帮助.

有没有人有一个好主意调整这个SQL或可以指向我正确的方向?



1> Erich Kitzmu..:

解释计划看起来尽可能好,但这并不一定意味着什么.Quassnoi提出的指数正是我所建议的.

无论如何,在你的程序中做300000个类似的查询让我问:这有必要吗?也许你可以用更少的查询达到相同的目标,每个查询都做得更多.

如果您无法避免执行这么多查询,那么至少应该使用预准备语句.如果你使用LINQ,那就是你编译的语句.这样,您就可以避免解析开销,这可能是整体支出的很大一部分,特别是对于这种简单的查询.

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有