有多少 LEFT JOINS 使 VIEW 无法使用?

mhe*_*all 0 sql-server execution-plan sql-server-2008-r2 view

我有一个视图,其中涉及 20 多个表上的 LEFT JOINS 到基表,但是在查询此视图并查看执行计划时,我得到了完全出乎意料的结果。

例如,对于下面的查询,我希望在表上进行聚集索引查找:

SELECT id FROM dbo.TableName WHERE id = 256
Run Code Online (Sandbox Code Playgroud)

而当我使用视图时,我会在表上找到聚集索引以及 3 个嵌套循环(左外连接)。

SELECT id FROM dbo.ViewName WHERE id = 256
Run Code Online (Sandbox Code Playgroud)

为什么会出现这种情况?上面是一个非常简单的例子,但是当从视图中选择额外的列时,越来越多的不必要的 LEFT JOINS 出现在执行计划中。

mhe*_*all 5

Martin Smith 提供的指向现有 SO 问题的链接为我提供了答案:

主要限制是外键关系必须基于单个键才能有助于简化过程