我有一个视图涉及 20 多个表上的 LEFT JOINS 到基表,但是在查询此视图并查看执行计划时,我得到了一些完全出乎意料的结果。
例如,对于下面的查询,我希望在表上进行聚簇索引查找:
SELECT id FROM dbo.TableName WHERE id = 256
而当我使用视图时,我会在表中查找聚集索引以及 3 个嵌套循环(左外连接)。
SELECT id FROM dbo.ViewName WHERE id = 256
为什么会出现这种情况?上面是一个非常简单的例子,但是当从视图中选择额外的列时,执行计划中会出现越来越多不必要的 LEFT JOINS。
Martin Smith 提供的指向现有 SO 问题的链接为我提供了答案: