如何优化DB2查询 - 将一行连接成百万行

时间:2014-11-30 05:12:31

标签: sql db2

我有一个db2查询,它将事实表(300M行)与日期表(1行)连接起来。日期表中的日期用于where条件,仅获取该日期的数据。但查询3个小时。

Select * from fact, date 
where fact.procdate between date.lastdate and date.currdate

有没有办法在不使用plsql的情况下优化此查询?

1 个答案:

答案 0 :(得分:0)

如果您将该查询提供给db2expln,您会看到所有300M行都会被评估,可能会多次。您要求DB2构建cartesian product,然后评估where子句。

在任何情况下,该查询甚至可能无法提供您期望的结果。您应该更仔细地研究输出以确定它。你更可能想要做像

这样的事情
Select * from fact 
where fact.procdate between DATE("firstdate") and DATE("seconddate")

您应该从应用程序逻辑提供的firstdate和seconddate(可能是对表日期的单独查询)。或者,您可以设置子查询以检索开始日期和结束日期。