SQL Server では、次のようなインデックス付きビューを作成します。
create view dbo.ItemRatings
with schemabinding
as
select
ItemId,
COUNT_BIG(*) as Cnt,
SUM(Rating) as TotalRating
from
dbo.UserItemRating
group by
ItemId
go
create unique clustered index IX_ItemRatings on dbo.ItemRatings (ItemId)
インデックス付きビューの作成と使用にはさまざまな制限がありますが、上記は有効です (スキーマUserItemRating
にあると仮定します)。dbo
注意事項:
- これは
WITH SCHEMABINDING
、テーブルを参照するために 2 つの部分からなる名前を使用する必要があることを意味します。
- 句
COUNT_BIG()
を使用できるようにするために使用する必要がありますGROUP BY
- 平均は直接含まれていません (実際、インデックス付きビューでは許可されていません)。ただし、を
AVG
で割ることで計算できます。SUM()
COUNT_BIG()
- このビューでインデックスを利用するには、
NOEXPAND
ヒントを使用してクエリを実行するか、Enterprise Edition 以上を実行する必要があります。
これがトリガー/テーブル ベースのソリューションよりも好まれるのはなぜですか? メンテナンスを実行するコードはSQL Server に組み込まれているため、他のソリューションよりも全体的なオーバーヘッドが少なくなります。(そして、それが正しいことを確認するために時間を費やす必要はありません)
Enterprise Edition を使用している場合、クエリで直接参照しなくても、このインデックス付きビューを利用することもできCOUNT
ます。索引。SUM
AVG