Gav*_*vin 3 sql t-sql sql-server
说我有一个简单的观点,MyView
.
如果我做:
SELECT * FROM MyView
Run Code Online (Sandbox Code Playgroud)
我知道后面的底层查询MyView
是为了构建视图而执行的.
现在,如果我是:
SELECT * FROM MyView WHERE MyValue BETWEEN 2 AND 5
Run Code Online (Sandbox Code Playgroud)
我是否认为在WHERE
应用之前仍必须执行整个基础查询?
我相信这是从执行计划窗口看到的情况,但我认为我的例子可能太简单了,看不到任何真正的区别.
(这意味着随着事情变得越来越复杂,取决于WHERE
构成视图的连接的条件和条件,在不使用视图的情况下编写查询会更有效吗?)
编号A where
外部施加到视图子句"插入"到该视图,好像它是它的一个组成部分.无论这是否会导致视图的所有记录获取取决于您所查询的列的性质,但其结果将基本上是一样的,如果你执行即席查询由该视图机身加你的where
条款.
例如,这个观点:
create view that_view as select * from Orders
Run Code Online (Sandbox Code Playgroud)
将在Orders
表上扫描执行,返回所有记录,而
select * from that_view where order_number = 1
Run Code Online (Sandbox Code Playgroud)
将使用索引搜索执行order_number
(如果您有索引),只返回一行而不构建整个表.