インデックス付きビューを使用して、最もよく使用されるいくつかのビューのパフォーマンスを向上させることを検討してきました。
ただし、インデックス付きビューは、一意ではないクラスター化インデックスをサポートしていません。これは、データベース構造の残りの部分によって設定された優先順位に少し影響します。
たとえば、ここにいくつかのテーブルの簡略化したバージョンがあります。
-Groups-
Group ID GroupName
-Users-
UserKey UserName FullName GroupID
インデックスは、Groups.GroupID(非クラスター化)およびUsers.GroupID(クラスター化)にあります。クラスター化されたキーは、最も一般的には特定のグループの一連のユーザーが取得されるため、UsersテーブルのGroupIDにあります。当然、グループごとに複数のユーザーがいるため、このクラスター化インデックスは一意ではありません。
このため、この例のようにビューにインデックスを付けるときに、この優先順位に従う方法が少し不確かになります。これは、一意でないクラスター化インデックスを持つことができないためです。
ConsumableID ConsumableVariantID AllowThresholdOverwrite FullPath GroupID ManufacturerID Type ModelID
101 29 1 0.1.2.4. 4 3 3 2
実際には、常に一意であるこのビューの唯一の値はConsumableID列です。そのため、インデックスを配置する場所についてほとんど選択肢がありません。
通常のテーブルで許可されているのに、ビューが一意でないクラスター化インデックスを許可しないのはなぜですか?
(GroupID, UserID)
。キーの列を1つに制限しないでください。2-ビューの制限は、これが行をNCインデックスに簡単に関連付ける必要がある補足データオブジェクトであるためと考えられます。テーブルの場合、一意ではないCIキーにはintが追加されますが、実際のテーブルではないが実際のテーブルをREFLECTする必要があるため、インデックス付きビューの方が難しいと思います。