【问题标题】:SQL Server Engine optimization in Views视图中的 SQL Server 引擎优化
【发布时间】:2015-02-10 12:53:55
【问题描述】:

我在同一个 SQL Server 实例中有两个数据库 DB1DB2。这是两个数据库的结构

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引擎是否:

  1. a) 首先运行视图定义的查询(返回所有行和所有列)b) 然后选择行 Total > 100 em> 或
  2. 它正在将 where 语句直接应用于 View 的查询,并且它只从 View 的查询中返回列 Total

【问题讨论】:

标签: sql-server


【解决方案1】:

因此,当您运行 VIEW 时,优化器会转到 VIEW 定义并获取 QUERY PLAN。然后它执行QUERY PLAN,然后执行您的WHERE 子句。因此,要回答问题,将选择所有行,然后应用您的过滤器。现在所有这一切都可以根据您是否materialized 您的视图(在其上放置索引)而改变,那么所有行都不会返回。查询将被过滤,然后只处理总行数 > 100 的行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-18
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多