我有一个包含 3 行的临时表 #termin
当我执行以下查询时
SELECT t.termin, ttw.tourid, twt.va_nummer_int
FROM #term AS t
INNER JOIN plinfo.t_touren_werbeflaechentermine AS ttw
ON ttw.termin = t.termin
INNER JOIN wtv.t_werbeflaechentermine AS twt
ON twt.jahr = t.jahr
AND twt.termin = t.termin
AND twt.ID_Wt = ttw.id_wt
GROUP BY t.termin, ttw.tourid, twt.va_nummer_int
Run Code Online (Sandbox Code Playgroud)
每个表都使用匹配的索引进行连接。两个表都由 ps_termin(termin) 进行分区。
对于第一个表 (t_touren_werbeflaechentermine),它执行分区消除并仅读取行的一个子集,而对于第二个表 (t_werbeflaechentermine),它扫描整个索引 ( jahr, termin, id_wt include (va_nummer_int))。
所以我的问题是:为什么它是索引扫描(而不是搜索),为什么它不消除第二个表的分区。
PS:在WITH (FORCESEEK)第二个表上使用时,它会在执行计划中切换两个表并对第一个表进行全索引扫描......
PPS:可以在此处找到执行计划