Wie finde ich welche Indizes verwendet werden und welche Abfrage benutzt der Index?

Ich verwende SQL server 2008. Ich habe Tabellen, auf denen es doppelte Indizes (grundsätzlich Indizes mit derselben Definition) gibt. Ich wollte wissen, ob es möglich ist, herauszufinden, welche Abfragen diese Indizes verwenden? Ich weiß nicht, warum die doppelten Indizes an erster Stelle erstellt wurden. Also, bevor ich sie entfernt habe, möchte ich irgendwelche Fragen identifizieren, die sie benutzen.

Eine weitere Frage ist in oben Fällen, wie funktioniert SQL server-Engine bestimmen, welche Index zu verwenden? Was ist der Einfluss davon?

Danke frage

Wenn Sie Indizes in Ihrer database haben, die exakte Duplikate sind, löschen Sie sie, timeraum. Kein Schaden kann aus dem Entfernen der Duplikate kommen, aber Schaden kann aus den vorhandenen Duplikaten kommen.

Die Tatsache, dass SQL server sogar erlaubt, dass doppelte Indizes an erster Stelle erstellt werden, ist lächerlich.

Hier ist ein Artikel, wie man unbenutzte (und fehlende) Indizes findet: http://weblogs.sqlteam.com/mladenp/archive/2009/04/08/SQL-server—Find-missing-and-unused-indexes .aspx

Wenn die Indizes wirklich doppelt sind, dann sollte es egal sein, welche Fragen sie verwenden. Wenn Sie eine entfernen, sollte die Abfrage die andere verwenden (es sei denn, es gibt einen Abfragehinweis, der einen Indexnamen angibt, der selten ist).

Stellen Sie einfach sicher, dass die Indizes wirklich Duplikate sind:

  • Indizierte Feldauftragsangelegenheiten. Ein Index auf (fname, lname) ist nicht derselbe wie ein Index auf (lname, fname)
  • Ein Index auf (lname) ist reduntant, wenn man schon einen hat (lname, fname, … andere Felder) (von links nur noch, bestellt auch hier)
  • Kontrollieren Sie die enthaltenen Felder. Ähnliche aussehende Indizes können unterschiedliche Felder enthalten, um verschiedene Abfragen abzudecken (obwohl man diese noch immer konsolidieren könnte, indem man einen Index mit allen eingeschlossenen Feldern bildet)
  • Andere properties des Index können dazu führen, dass sich ein Index etwas anders als der andere verhält (geclustert? Einzigartig? Fill Factor? Maximaler Parallelitätsgrad? Filegroup? Auto-recompute stats?) (Du brauchst wohl noch nicht 2 verschiedene Indizes, aber lohnt sich, die Unterschiede zu verstehen, jedenfalls)

Mit dem DMV (dynamische Managementansichten) können Sie auf jeden Fall herausfinden, welche Indizes nicht genutzt werden – diejenigen, die nicht lange benutzt wurden, konnten gelöscht werden.

Auschecken:

  • Indizes finden, die nicht benutzt werden
  • Allgemeine Intro zu dynamischen Managementansichten

Eine weitere Frage ist in oben Fällen, wie funktioniert SQL server-Engine bestimmen, welche Index zu verwenden?

Das ist ein ziemlich komplizierter process – der SQL server-Abfrage-Optimierer verwendet Statistiken und andere methods, um herauszufinden, welche Indizes für eine gegebene Abfrage hilfreich sein würden. Welches wird es wählen, wenn man zwei identische hat, ist eine heikle Frage … ich weiß es nicht ganz ehrlich.

Was ist der Einfluss davon?

Von doppelten identischen indizes Diese müssen bei jedem INSERT-, UPDATE- und DELETE-Betrieb gepflegt werden, der die Spalten im Index berührt – also bezahlt man definitiv eine Performance-Strafe dafür.