2011-11-08 6 views
2

インデックス付きビューの作成時に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 
) 

を私はSQL Serverは、このための物理的なストレージのいくつかの並べ替えを(?テーブル?何を)作成することを修正しています。物理ストレージまたはテーブルには、read_time列が> 11/4/2011の行のみが含まれ、クラスタ化インデックスは示された列に存在しますか?

答えて

7

'テーブル'は論理概念です。「テーブル」の記憶概念はありません。記憶域として、SQL Serverはヒープ(順序付けられていない行のセット)またはb-tree(順序付けられた行のセット)の2種類の記憶域を認識します。インデックス(クラスタ化または非クラスタ化)はbツリーです。クラスタ化インデックスのない 'テーブル'には、ベースストレージ用のヒープがあります。

インデックス付きビューを作成すると、ビュー定義とクラスタードインデックス定義に従って、クエリを満たす行を含む新しいb-treeが追加されます。さらに、テーブルのすべての操作では、インデックス付きビューbツリーも維持されます。テーブル内の削除によって、インデックス付きビューbツリーから行が削除され、テーブルに挿入されるとインデックス付きビューbツリーに行が追加され、テーブル内の行を更新すると、インデックス付きビューのbツリーの行が更新されます。このメンテナンスにより、元のビュー定義の条件が引き続き満たされます。WHERE read_time>...条件に一致する行のみが追加されます。read_timeを条件を満たさない値に変更する更新が、インデックス付きビューから行を削除します。b-このようなすべてのメンテナンスは、挿入/更新/削除操作のクエリ実行計画を適切に修正してインデックス付きビュー述語を評価し、インデックス付きビューb-treeに対して適切な操作を行うことによって達成される。一般的な誤解状態とは異なり、ビューのクエリはであり、メンテナンスのために明示的に再評価されることはありません。すべてのメンテナンスは、行が挿入/更新/削除されるにつれて行単位で行われます。そのため、インデックス付きビューでは特定の集計演算(MIN、MAXなど)がサポートされていません。

関連する問題