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?
ich erstaunt Sie solche Eigenschaften von Management Studio kennen. –