【发布时间】:2011-08-10 08:32:37
【问题描述】:
我在 Oracle 数据库中有一个表,其中包含一个时间戳列 nextTime 和一个字符串列 destName。还有更多列,但在这种情况下只有这两个是相关的。我正在尝试设计一个查询,该查询将返回具有特定间隔内的 nextTime 的不同 destName,并且返回的行数最多应为一千。当间隔内有超过一千个不同的 destName 时,我希望查询返回一千行,不多也不少。
我实际上有一个正在运行的查询,但它太慢了:
select destName
from (select /*+ index(tblDestNames tbldestnames_destname)*/ distinct destName
from (select /*+ index(tblDestNames tbldestnames_nextTime)*/ destName
from tblDestNames
where nextTime < :1 and nextTime >= :2 and destName is not null))
where rownum <= 1000;
非常感谢任何关于如何设计更智能的查询或如何优化现有查询的想法。
【问题讨论】:
-
参数 :1 和 :2 是否以 :1 > :2 的方式绑定?如果不是,查询将不会返回任何内容。如果是的话,最好写
nextTime >= :2 and nextTime < :1来强调参数的顺序。 -
@Aleksi:感谢您的评论!是的,:1 > :2 总是正确的。您建议的更改很有意义,我会应用它。
标签: sql oracle query-optimization distinct rownum