「Ge_Entry」という名前のビューの実行速度が非常に遅いため、selectの個別のステートメントを使用してインデックス付きビューを作成したいのですが、SQLサーバーでは許可されていません。
だから私はs.distステートメントでi.viewを作成する方法があるか知りたいです。
迅速な結果を得るために、このビューにインデックスを作成できるようにします。
ありがとう
ニール
「Ge_Entry」という名前のビューの実行速度が非常に遅いため、selectの個別のステートメントを使用してインデックス付きビューを作成したいのですが、SQLサーバーでは許可されていません。
だから私はs.distステートメントでi.viewを作成する方法があるか知りたいです。
迅速な結果を得るために、このビューにインデックスを作成できるようにします。
ありがとう
ニール
個別に使用することはできません。しかし、おそらく次のようCOUNT_BIG(*)
に andを使用できます。GROUP BY
CREATE VIEW v1
WITH SCHEMABINDING
AS
SELECT ColumnA,ColumnB,COUNT_BIG(*) as Cnt
FROM BaseTable
GROUP BY ColumnA,ColumnB
GO
CREATE UNIQUE CLUSTERED INDEX IX_v1 ON v1 (ColumnA,ColumnB)
GO
それ以外のDISTINCT ColumnA,ColumnB
インデックス付きビューを作成するための規則のほとんどは、インデックスを維持する効率に関連しているようです。次の内容のベース テーブルがあるとします。
ID ColumnA ColumnB
1 abc def
2 abc def
3 ghi jkl
そして、純粋に個別に基づいてビューを作成することが許可されました。ここで、テーブルから行を削除します。SQL Serverはビューのインデックスから行を削除する必要がありますか? ベーステーブル全体を再度スキャンすることによってのみ見つけることができます。ID 2
abc,def
これを上記のビュー定義と比較してください。ビュー データは次のようになります。
ColumnA ColumnB Cnt
abc def 2
abc def 1
ベース テーブルから行を削除するとID 2
、SQL Server はその行のCnt
列から 1 を引くことができますabc,def
。その列の新しい値が0
である場合、インデックスからその行を削除する必要があることを認識しています。逆に、値が の場合>0
、ベース テーブルにこの値の行がまだあることがわかります。