假设我只想从表中获取最新的日期数据。 所以,我写了下面的查询。
查询1:
select *
from tbl1
where dw_date = (select max(dw_date) from tbl)
查询2:
select *
from tbl1
where dw_date in (select max(dw_date) from tbl)
两个查询都会做同样的事情。
但是,我想知道哪个查询在大表上性能更好。
问题:
max(dw_date)
和dw_date in ()
,每次都会计算dw_date = ()
吗?我尝试使用上述查询,并给出了正确的输出。 我想知道查询将如何执行,它在后端如何工作。
后端执行: 子查询的单次执行:数据库计算一次 MAX(dw_date),检索结果,然后使用该值应用外部查询的过滤器。优化器确保不会为外表中的每一行重新计算子查询。
例如: 子查询 SELECT MAX(dw_date) FROM tbl1 将返回 2023-09-03。 然后外部查询将检查 tbl1 中每一行的 dw_date = '2023-09-03' 。