4

说我有一个简单的看法,MyView

如果我做:

SELECT * FROM MyView

我了解执行背后的基础查询MyView以构建视图。

现在,如果我要:

SELECT * FROM MyView WHERE MyValue BETWEEN 2 AND 5

我是否认为在WHERE应用之前仍必须执行整个基础查询?

我相信从执行计划窗口来看就是这种情况,但我认为我的例子可能太简单了,看不出任何真正的区别。

(这意味着随着事情变得越来越复杂,取决于WHERE构成视图的连接条件和条件,在不使用视图的情况下编写查询会更有效吗?)

4

1 回答 1

7

where不会。从外部应用于视图的子句被“插入”到视图中,就好像它是它的一个组成部分一样。这是否会导致获取视图的所有记录取决于您正在查询的列的性质,但结果基本上与执行由视图主体和where子句组成的即席查询相同。

例如,这个视图:

create view that_view as select * from Orders

将通过扫描Orders表执行,返回所有记录,而

select * from that_view where order_number = 1

将在索引搜索上执行order_number(假设您有索引),只返回一行而不构建整个表。

虽然存在一些问题

于 2012-04-10T10:20:01.883 回答