Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 视图中的SQL Server引擎优化_Sql Server - Fatal编程技术网

Sql server 视图中的SQL Server引擎优化

Sql server 视图中的SQL Server引擎优化,sql-server,Sql Server,我在同一个SQLServer实例中有两个数据库DB1和DB2。这是两个数据库的结构 DB1 表a: [key] Id int [required] Name nvarchar(50) DB2 表B: [key] Id int [required] Total real [required] IdTableA int // Foreign key 在DB1中,我还有一个视图: 表视图: select * from DB2

我在同一个SQLServer实例中有两个数据库DB1和DB2。这是两个数据库的结构

DB1

表a:

[key]      Id   int  
[required] Name nvarchar(50) 
DB2

表B:

[key]      Id           int
[required] Total        real
[required] IdTableA     int  // Foreign key
在DB1中,我还有一个视图:

表视图:

select * from DB2.dbo.TableB
现在我运行以下查询

select Total
from DB1.TableBView
where Total > 100
我想知道SQL引擎是否:

  • a)首先运行视图定义的查询(返回所有行和所有列)b)然后选择总计>100或
  • 它将where语句直接应用于视图的查询,并且只返回来自视图查询的列总数

  • 因此,当您运行
    视图
    时,优化器将转到
    视图
    定义并获取该
    查询计划
    。然后执行
    查询计划
    ,然后执行
    WHERE
    子句。所以,要回答问题,将选择所有行,然后应用过滤器。现在,所有这些都可能发生变化,这取决于您是否将视图物化(在视图上放置索引),然后所有行都不会返回。查询将被过滤,然后只处理总数大于100的行。

    似乎与此重复:或此:@KHeaney感谢链接!它们非常有用。