Wie kann ein Index eine select-statement verlangsamen?

Ich habe eine ziemlich schwierige time, zu finden, warum das Hinzufügen eines Indexes auf den Fremdschlüssel eines Tisches die view meines Kollegen verlangsamt. Diese view besteht aus mehreren verpackten viewen mit äußerem Join und innerem Join. Ich habe versucht, sie einzeln zu entfernen, um herauszufinden, wo das Problem war, aber ich kann nicht sagen, es scheint nicht aus einer bestimmten view zu kommen, sondern mehr von ihnen allen.

Ich wusste, Indizes könnten verlangsamen Insert oder dass sie Größe auf der Festplatte zu nehmen, aber ich habe nie irgendwo gelesen, dass sie verantwortlich sein könnte für die Verlangsamung einer view. Die Wahrheit ist, wenn ich tue:

DBCC FREEPROCCACHE DBCC DROPCLEANBUFFERS GO select top 20 * from MyView 

Es dauert 20 Sekunden mit dem Index und 9 ohne.

 CREATE NONCLUSTERED INDEX [IX_MyField] ON [dbo].MyTable ( [MyField] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY] 

Solutions Collecting From Web of "Wie kann ein Index eine select-statement verlangsamen?"

Es ist möglich, dass Ihre ANDEREN Indizes oder Stats veraltet sind. Wenn sie nicht aktuell sind, ist es möglich, dass der Abfrageanalysator einen suboptimalen Ausführungsplan mit Ihrem neuen Index auswählt, da er denkt, dass das schneller sein wird.

Versuche es zu laufen:

UPDATE STATISTICS WITH (FULLSCAN)

auf deinem tisch

Wählen Sie andere Spalten aus MyTable aus? Wenn ja, sind Sie wahrscheinlich ein Lesezeichen-Lookup (oder RID-Lookup), was bedeutet, dass Sie gehen zu Ihrem Tisch für die zusätzlichen data.

Sie sollten alle Spalten platzieren, die Sie zusätzlich in der INCLUDE Klausel des Index auswählen.

Führen Sie beide Abfragen mit Ausführungsplänen aus und vergleichen Sie die 2, um festzustellen, welche Teile der Abfrage länger dauern.