SQL Fiddle: http://sqlfiddle.com/#!6/d4496/1 (データは実験用に事前に生成されています)
明らかな表があります:
CREATE TABLE Entity
(
ID int,
Classificator1ID int,
Classificator2ID int,
Classificator3ID int,
Classificator4ID int,
Classificator5ID int
);
とビュー:
CREATE VIEW dbo.EntityView (ID, Code1, Code2, Code3, Code4, Code5)
WITH SCHEMABINDING
ここで、エンティティ フィールド Classificator1ID..Classificator5ID は分類値 Code1..Code5 に解決されます
このビューには多くのインデックスがあります。
CREATE UNIQUE CLUSTERED INDEX [IXUC_EntityView$ID] ON EntityView
([ID]);
CREATE UNIQUE NONCLUSTERED INDEX [IXU_EntityView$ID$include$ALL] ON EntityView
([ID]) INCLUDE (Code1, Code2, Code3, Code4, Code5);
CREATE UNIQUE NONCLUSTERED INDEX [IXU_EntityView$ALL] ON EntityView
([ID],Code1, Code2, Code3, Code4, Code5);
CREATE UNIQUE NONCLUSTERED INDEX [IXU_EntityView$ID$Code1] ON EntityView
([ID],Code1);
CREATE UNIQUE NONCLUSTERED INDEX [IXU_EntityView$ID$include$Code1] ON EntityView
([ID])INCLUDE (Code1);
CREATE NONCLUSTERED INDEX [IX_EntityView$Code1] ON EntityView
(Code1);
CREATE NONCLUSTERED INDEX [IX_EntityView$Code1$include$ID] ON EntityView
(Code1) INCLUDE (ID);
しかし、QO はそれらを使用しないでください。これを試して:
SELECT * FROM EntityView;
SELECT ID, Code1 FROM EntityView;
SELECT ID, Code1, Code2, Code3, Code4, Code5 FROM EntityView;
SELECT ID, Code1, Code2, Code3, Code4, Code5 FROM EntityView WHERE ID=1;
SELECT ID, Code1 FROM EntityView Where Code1 like 'NR%';
なんで?特に「インクルード」インデックスの何が問題なのですか? インデックスが作成され、すべてのフィールドがあり、まだ使用されていません...
追加: これはただのテストです! あまり怒らないでください。インデックスのメンテナンスの問題を分析するよう私に強要しないでください。
私の実際のプロジェクトでは、QO がインデックス付きビュー (非常に便利なインデックス付きビュー) を無視する理由を説明できません。しかし、時々私はそれが他の場所でそれらを利用しているのを見ます. インデックス式を試すためにこの db スニペットを作成しましたが、もっと何かを行う必要があるかもしれません。