我正在创建一个报告,为此我编写了 2 种不同类型的查询。但是我看到这两种方法之间存在巨大的性能差异。可能是什么原因?我的主表(假设表 A)包含一个日期列。我正在根据日期过滤数据。大约 10 个表连接我与这张表有关。
第一种方法:
select A.id,A1.name,...
from table A
join A1
join A2 ....A10
where A.Cdate >= @date
and A.Cdate <= @date
第二种方法:
With CTE as(select A.id from A where A.Cdate>=@date and A.Cdate<=@date)
select CTE.id, A1.name,.... from CTE join A1 join A2....A10
这里第二种方法很快。是什么原因?在第一种方法中,仅 A 的过滤数据将与其他表数据连接,对吗?