【发布时间】:2012-04-03 12:51:54
【问题描述】:
我正在尝试执行下面的查询,但大约需要 40 分钟。
select logentryid
from (
select * from logentry_payloaddata pd,
logentry le
where (
pd.entryid=le.logentryid
and
le.eventdatetime=(trunc(sysdate) - 14)
)
order by le.logentryid asc
)
在表 logentry 中有 4,24,91,461 条记录,在 logentry 有效负载数据中有 4,15,16,346 条记录(在世界某些地区或“42,491,461”和“41,516,346”,甚至“42.491.461”和“41.516.346”在其他一些部分——Ed.)
在相应的表中有logentryid和entryid的索引。
有人可以建议在这种情况下该怎么做。
【问题讨论】:
-
在 eventdatetime 创建索引?
-
这是导致问题的 eventdatetime 过滤器。我不确定这是什么 RDBMS,但您可能无法使用索引,因为您正在与函数的输出进行比较。
-
也重写。看起来像不必要的嵌套选择。您可能会受益于仅使用 le 的最后 14 天作为子选择,然后将其加入到 pd 中。
-
@Lamak:如果每个表中只有那么几条记录,我认为查询可能不会花费 40 分钟。
-
实际上,我认为这是印度对 Lakh 的常见用法(参见此处:en.wikipedia.org/wiki/Lakh)。我会将问题编辑为 good 'ole 'Merican。
标签: sql