2009-08-28 2 views
2

SQL Server 2008を使用していて、インデックス付きビューを使用していると検索が始まっています。基本的ではない。私は次のようなテーブルを...持っている場合Indexed ViewがSqlServerの背後で何をしているのか分かりません

ので、

**ParentTable 
ParentId INT PK IDENTITY 
Name VARCHAR(MAX) 

**ChildTable 
ChildId INT PK IDENTITY 
ParentId INT (FK to the table above) 
Name VARCHAR(MAX) 
Boundary GEOGRAPHY 
CentrePoint GEOGRAPHY 
CentrePointFlattened GEOMETRY 

だから、親テーブルの行ごとに、それは多くの子供たちにゼロを持つことができます。

最初に、子のインデックスビューを作成すると、ParentIdフィールドにnull値を設定できる場合は動作しません。だから私はそれを必要とする必要があります。

今質問があります。

私は、親テーブルに子テーブルの内側join'dのインデックスビュー(私はテーブルのいずれかからフィールドのいくつかをインデックス化しています注意してください)...今

(pseduo sql code) 
ParentId INT 
Name VARCHAR(MAX) AS ParentName 
ChildId INT 
Name VARCHAR(MAX) as ChildName 
Boundary GEOGRAPHY 

を持っていますこれらの5つのフィールドのデータは、別の場所にシリアル化/コピーされました?またはインデックスビューは、そのテーブルのデータであるインデックスIDだけを作成しますか?

答えて

2

はい。インデックス付きビューは基本的に別のインビジブルテーブルで、基になるテーブルが変更されると自動的に更新されます。

+0

しかし、そのテーブルの内容は何ですか?元のテーブルと同じもの?だから私は地理データの2つのコピーを持っていますか?またはこの2番目の_invisible_テーブルだけの数字は、さまざまな列などのインデックスですか? –

+0

"ビューの照会の結果"(ビューに含まれている列)は、索引に保管されます。すべての列データを格納するテーブルとまったく同じです。元のテーブル行へのポインタは保存されません(ビュー内のデータとバッキングテーブルの間には必ずしも1対1の関係がありません。結合や計算されたものを考えてください) –

+0

神聖なmolly!私はなぜ私のDBのサイズは...うーん、大規模になっている説明するかもしれない:P –

関連する問題