我有一个表,我希望根据我计算的中间CTE的最大时间戳值使用where子句进行过滤。为什么当我将它与静态日期字符串进行比较时,它执行速度很快,但是当我将它与子查询进行比较时,它会进行爬行?
快速:
WHERE tstamp > '2018-03-07' --This is fast
慢
WHERE tstamp > (SELECT MAX(tstamp) FROM some_temp_cte) --This is really really slow
你们有什么关于加快速度的提示吗?感谢。
答案 0 :(得分:1)
有些数据库倾向于在每行的where
和select
子句中重新执行子查询。我建议将逻辑移到from
子句:
FROM . . . CROSS JOIN
(SELECT MAX(tstamp) as max_tstamp FROM some_temp_cte) tt
WHERE tstamp > max_tstamp