我有一个db2查询,它将事实表(300M行)与日期表(1行)连接起来。日期表中的日期用于where条件,仅获取该日期的数据。但查询3个小时。
Select * from fact, date
where fact.procdate between date.lastdate and date.currdate
有没有办法在不使用plsql的情况下优化此查询?
答案 0 :(得分:0)
如果您将该查询提供给db2expln,您会看到所有300M行都会被评估,可能会多次。您要求DB2构建cartesian product,然后评估where子句。
在任何情况下,该查询甚至可能无法提供您期望的结果。您应该更仔细地研究输出以确定它。你更可能想要做像
这样的事情Select * from fact
where fact.procdate between DATE("firstdate") and DATE("seconddate")
您应该从应用程序逻辑提供的firstdate和seconddate(可能是对表日期的单独查询)。或者,您可以设置子查询以检索开始日期和结束日期。