SQL Server 2008 - 了解索引视图

Hos*_*146 2 sql-server sql-server-2008

我想尝试了解创建索引视图时SQL Server 2008正在做什么.

说我有以下内容:

CREATE View [vwCoaterC48] WITH SCHEMABINDING
AS

Select
    ID,
    equipment_id as EquipmentId,
    read_time as ReadTime,
    C48_R_Act_Temperature,
    C48_L_Act_Temperature,
    C48_C_Act_Temperature
From dbo.td_coater_c48 c
Where read_time >= Convert(dateTime,'11/4/2011',120)

CREATE UNIQUE CLUSTERED INDEX [IX_vwCoaterC48_ReadTime_EquipmentID_ID] ON [vwCoaterC48] 
(
    [ReadTime] ASC,
    [EquipmentId] ASC,
    [ID] ASC
)
Run Code Online (Sandbox Code Playgroud)

我是否正确SQL Server将为此创建某种物理存储(表?,什么?).物理存储或表只包含read_time列> = 11/4/2011的行,并且指示的列上将存在聚簇索引?

Rem*_*anu 7

"表"是一个逻辑概念,"表"没有存储概念.作为存储,SQL Server了解两种类型的存储:堆(一组无序行)或b树(一组有序行).索引(聚簇或非聚簇)是b树,没有聚簇索引的"表"具有用于基本存储的堆.

根据视图定义和聚簇索引定义,创建索引视图会添加包含满足查询的行的新b树.此外,表上的所有操作也维护索引视图b-tree:表中的删除从索引视图b-tree中删除行,插入表中将行添加到索引视图b-tree中,更新表中的行会更新索引视图b-tree中的行.此维护保证继续满足原始视图定义中的WHERE read_time>...条件:仅添加与条件匹配的行,修改read_time为不再满足条件的值的更新将从索引视图b-tree等中删除该行所有这些维护都是通过适当修改插入/更新/删除操作的查询执行计划来评估索引视图谓词并在索引视图b-tree上执行适当的操作来完成的.与一些常见的误解状态不同,视图查询永远不会被显式重新评估以进行维护,所有维护都是在插入/更新/删除行时逐行评估完成的.这就是索引视图中不支持某些聚合操作(例如MIN,MAX)的原因.