1

SQL Server 2005 の Express エディションには、最適な実行計画を推定する際にマテリアライズド ビュー (スキーマ バインド付き) が自動的に含まれないことを知っています。ただし、ビューが直接クエリされると、実際の実行計画に表示されるアンダーリング テーブルが表示されます。クエリで使用される具体化されたビューでクラスター化インデックスが作成されないのはなぜですか?

ビューのコードは次のとおりです。

CREATE VIEW [dbo].[athObjectNames] WITH SCHEMABINDING
AS
SELECT     convert(nvarchar(440),oTextValue) as oTextValue, oObjectID, oTypeID, oVersion
FROM         dbo.athObjects
WHERE     (oTypeID < 100)

そして、一意のクラスター化インデックスが oTextValue 列に作成されます。

ただし、次のようなクエリを実行すると:

select * from dbo.athObjectNames
where oTextValue = 'Alibabki'

...基になるテーブル (dbo.athObjects) が条件付きの実行プラン (oTypeID < 100) で使用されていることがわかります。athObjects テーブルの oTextValue 列にはインデックスがありません。条件を「< 'Alibabki'」に変更しても、インデックスは役に立ちません。

助けてくれてありがとう。

4

1 に答える 1

1

OK、「with (noexpand)」ヒントを使用して、オプティマイザにマテリアライズド ビューを強制的に使用させる必要があることがわかりました。多分これは他の人を助けるでしょう。:-)

于 2010-02-04T10:42:11.260 に答える