SQL Serverのビューは保存されたT-SQLクエリであり、仮想テーブルとしてクエリを簡素化しセキュリティ層を追加します。ただし、インデックス作成には物理的実体が必要なため、標準ビューへの直接的なインデックス付与は不可能です。
インデックス付きビューの特性
SQL Server 2000以降で利用可能なインデックス付きビューは、データベース内に実体化(マテリアライズ)されます。基本テーブルが更新されると、関連するビューインデックスも自動的に更新されます。集計処理を含む大規模データセットの操作で有効ですが、更新処理のオーバーヘッドが発生する点に注意が必要です。
実装条件と手順
インデックス付きビューを作成するには、以下の条件を満たす必要があります:
- ANSI_NULLSなどのセッション設定が有効化されていること
- SCHEMABINDINGオプションを使用したビュー定義
- 最初に作成するインデックスは一意クラスタ化インデックスであること
基本テーブル作成例
CREATE TABLE SalesRecord (
ItemID INT PRIMARY KEY,
ProductName NVARCHAR(50),
Price DECIMAL(10,2),
SaleDate DATE
);
インデックス付きビュー定義
SET ANSI_NULLS, ANSI_PADDING, ANSI_WARNINGS ON;
SET CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER ON;
SET NUMERIC_ROUNDABORT OFF;
CREATE VIEW dbo.vw_ProductSalesSummary
WITH SCHEMABINDING
AS
SELECT
ProductName,
COUNT_BIG(*) AS TotalTransactions,
SUM(ISNULL(Price,0)) AS Revenue
FROM dbo.SalesRecord
GROUP BY ProductName;
CREATE UNIQUE CLUSTERED INDEX IDX_ProductSummary
ON vw_ProductSalesSummary(ProductName);
インデックス利用の最適化
クエリオプティマイザがビューインデックスを使用しない場合、NOEXPANDヒントで強制的に適用可能です:
SELECT ProductName, Revenue, TotalTransactions
FROM vw_ProductSalesSummary WITH (NOEXPAND)
WHERE ProductName = 'Laptop';
Enterprise Edition以外では自動的にインデックスが使用されないため、この手法が特に有効です。
パフォーマンス検証の重要性
インデックス付きビューはクエリ速度を劇的に改善しますが、基盤テーブルの更新コストが増加します。実装前には必ず負荷テストを実施し、トレードオフを評価してください。