5

「Ge_Entry」という名前のビューの実行速度が非常に遅いため、selectの個別のステートメントを使用してインデックス付きビューを作成したいのですが、SQLサーバーでは許可されていません。

だから私はs.distステートメントでi.viewを作成する方法があるか知りたいです。

迅速な結果を得るために、このビューにインデックスを作成できるようにします。

ありがとう

ニール

4

1 に答える 1

21

個別に使用することはできません。しかし、おそらく次のよう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 2abc,def

これを上記のビュー定義と比較してください。ビュー データは次のようになります。

ColumnA      ColumnB        Cnt
abc          def            2
abc          def            1

ベース テーブルから行を削除するとID 2、SQL Server はその行のCnt列から 1 を引くことができますabc,def。その列の新しい値が0である場合、インデックスからその行を削除する必要があることを認識しています。逆に、値が の場合>0、ベース テーブルにこの値の行がまだあることがわかります。

于 2012-09-14T06:48:51.250 に答える