采取以下查询:
SELECT *
FROM FactALSAppSnapshot AS LB
LEFT OUTER JOIN MLALSInfoStage AS LA ON LB.ProcessDate = LA.ProcessDate AND
LB.ALSAppID = LA.ALSNumber
LEFT OUTER JOIN MLMonthlyIncomeStage AS LC ON LB.ProcessDate = LC.ProcessDate AND
LB.ALSAppID = LC.ALSNumber
LEFT OUTER JOIN DimBranchCategory AS LI on LB.ALSAppBranchKey = LI.Branch
WHERE LB.ProcessDate=(SELECT TOP 1 LatestProcessDateKey
FROM DimDate)
请注意,WHERE
条件是一个标量子查询。运行时会0:54
产生367,853
记录。
但是,如果我将WHERE
子句切换为以下内容:
WHERE LB.ProcessDate=20161116
这以某种方式导致查询运行时跳转到57:33
仍然产生367,853
记录。幕后发生了什么会导致运行时的巨大飞跃?我本来希望子查询版本需要更长的时间,而不是文字整数值。
别名为LI
(last join on the list) 的表似乎是唯一没有在其键上编制索引的表,并且如果我将该表作为连接删除并使用整数,似乎允许查询执行更接近第一个查询值而不是子查询。
SQL 服务器 11