パフォーマンスを達成するには、インデックス付きビューを使用する必要があります。私が見ることができるように この比較表 標準版はインデックス付きビューをサポートしていません。しかしBOLは言う:
インデックス付きビューは、SQL Serverのどのエディションでも作成できます。 SQL Server Enterpriseでは、クエリオプティマイザーは自動的にインデックス付きビューを考慮します。他のすべてのエディションでインデックス付きビューを使用するには、NOEXPANDテーブルヒントを使用する必要があります。
それでうまくいくでしょう(私はパフォーマンスについて話している)
select * from dbo.OrderTotals with (noexpand, index=IXCU_OrderTotals)
sQL Server Standardエディションと同様に機能します
select * from dbo.OrderTotals
エンタープライズ版では?
ビューのコードは次のとおりです。
CREATE VIEW dbo.OrderTotals
WITH SCHEMABINDING
AS
select
OrderId = r.OrderId
, TotalQty = SUM(r.Quantity)
, TotalGrossConsid = SUM(r.Price * r.Quantity)
, XCount = COUNT_BIG(*)
from dbo.Order r
group by r.OrderId
CREATE UNIQUE CLUSTERED INDEX IXCU_OrderTotals ON OrderTotals (OrderId)
違いは、ヒントのないEnterpriseエディションでは、インデックス付きビューではなくベーステーブルを使用することを決定する可能性があることです。
私の個人的な経験では、SQL Serverはこれについていくらか頭がおかしいです。ほとんどの場合、ヒントを使用する必要があります。クエリが高速であるIOプランは、ベーステーブルでのインデックスシークではなく、ビューでのスキャンの方が "見た目が悪い"場合でも、より一貫して実行されます
もちろんYMMV :-)
だから、答えるために、それは私が見たものに基づいて同じように動作するはずです(すべきですか?)他の人々は異なる経験をしているかもしれません、そして私は他の答えに興味があります
ヒントの使用を回避するために、インデックス付きビューを別のビューのヒントでラップすることができます。ヒントは、すべての外部クエリに内部に伝播し、自動的にNOEXPANDを持ちます。