SQL Serverインデックス[JOINSが機能しない]とのマッチングビュー
質問
SQL Server 2008 R2がクエリに結合するインデックス付きビュー(マテリアルビューとも呼ばれる)を自動的に一致させることができるときの経験はありますか?
たとえば、ビュー
select dbo.Orders.Date, dbo.OrderDetails.ProductID
from dbo.OrderDetails
join dbo.Orders on dbo.OrderDetails.OrderID = dbo.Orders.ID
まったく同じクエリに自動的に一致させることはできません。このビューから直接選択するとき with (noexpand)
実際、インデックスビューのクラスター化されたインデックスをスキャンするはるかに高速なクエリプランを取得します。 SQL Serverにこれを自動的に一致させることはできますか?私はかなりの数のクエリとビューを持っています、そして、私はまたはマッパーを使用しているので、毎回インデックスビューを手動で参照したくありません。
SQL Server 2008 R2のエンタープライズエディションに参加しています。
編集:解決策を見つけました。 SQL Server 2008 R2は、インデックス付きビューを自動的に2つ以上結合することと一致しません。おそらく、最適化プロセスが遅くなりすぎるでしょう。
編集2:質問が作成されてから2年後にこのレビューが作成されたので、私の結論が正しかったとは思いません。具体化されたビューマッチングは非常に脆弱なプロセスであり、長年にわたって見つけることができる明確なルールはありません。
確かに、次の役割が役割を果たします。
- 結合の数
- 述語の存在
- ビューとクエリの両方で、注文に参加してください
解決
私はあなたの質問が正確に何であるかについて少しあいまいです。しかし、私はこれがあなたにあなたが望むものを与えると思います:
http://msdn.microsoft.com/en-us/library/ms181151.aspx
SQL Serverがクエリでビューインデックスを使用する場合に制限する奇妙でarbitrary意的な条件がたくさんあります。このページは、SQL Server 2008にそれらを文書化します。