2010-12-13 13 views
2

ich eine indizierte Sicht erstellt haben (MyView), das aus drei Säulen besteht:SQL Server 2008 R2 und Ausführungsplan in der indizierten Sicht

Table1_ID (int not null) 
Object_CreationDate (datetime, null) 
Objec_Count(bigint null) 

I gruppierten eindeutigen Index IX_1 auf zwei erstellt haben Spalten: Table1_ID Und Object_CreationDate

ich zwei Abfragen ausführen möchten:
1.

Select * from [dbo].MyView 
where Table1_ID = 10 

2.

Select * from [dbo].MyView 
where Table1_ID = 10 
AND Object_CreationDate <= GETDATE() 

1-st-Abfrage läuft schnell (auch bei DBCC DROPCLEANBUFFERS()) und einfachen Ausführungsplan verwendet MyView und IX_1 über mit
2-nd Abfrage läuft nicht so schnell, weil es verwendet "alten" Ausführungsplan (Suche nach mehreren Indizes in drei Tabellen und verschachtelte Schleifen)

Ich missverstanden diese Situation. Wie für mich ist es natürlich, verwenden Sie IX_1 und MyView für die 2. Abfrage.
Darüber hinaus warte ich, dass die zweite Abfrage die gleiche Geschwindigkeit oder sogar schneller als 1-st, weil es zwei Spalten in where-Klausel, die im Clustered-Index sind verwendet wird.

Ich habe versucht, 2. Abfrage with(index=IX_1) ausführen und Statistiken für Spalten aktualisieren, aber immer noch den gleichen Ausführungsplan haben.

Ist es möglich, SQL verwenden MyView UND IX_1 zu zwingen?

Antwort

6

Es sei denn, Sie Enterprise/Developer Edition verwenden, müssen Sie die

Select * from [dbo].MyView WITH (NOEXPAND) 
where Table1_ID = 10 
AND Object_CreationDate <= GETDATE() 

Von Designing Indexed ViewsWITH NOEXPAND hint sind:

Indizierte Sichten können 2008 in einer beliebigen Edition von SQL Server erstellt werden, in SQL Server 2008 Enterprise berücksichtigt der Abfrageoptimierer automatisch die indizierte Sicht. Um eine indizierte Sicht in allen anderen Editionen zu verwenden, muss der NOEXPAND-Tabellenhinweis verwendet werden.

(Und Developer Edition ist im Grunde Enterprise Edition, mit verschiedenen Lizenz)

+1

ich erstaunt Sie solche Eigenschaften von Management Studio kennen. –