Wie Sie feststellen, ob ein Index erforderlich oder notwendig ist - Datenbank-Administratoren Stapelaustausch
Ich habe ein Auto-Index-Tool auf unserer MS SQL-Datenbank ausgeführt wird (I modifiziert, um ein Skript von Microsoft stammen, die in den Index-Statistiken Tabellen sieht - Automatische Auto Indizierung). Aus den Statistiken, habe ich jetzt eine Liste von Empfehlungen für Indizes, die die Erstellung benötigen.
Edit: Die Indizes oben nehmen Informationen aus der DMV beschrieben, die Ihnen sagen, was die Datenbank-Engine für Indizes verwenden würden, wenn sie verfügbar waren und die Skripte nehmen die Top x Empfehlungen (von sucht, Auswirkungen auf den Benutzer etc.) und setzen diese in einer Tabelle.
(Bearbeiten oben teilweise genommen von Larry Coleman Antwort unten, um zu klären, was der Skripte tun)
Als ich Datenbank Admin bin neu, und eine schnelle Suche um das Netz gehabt zu haben, bin ich nur ungern den Sprung zu wagen und blind den empfohlenen Indizes hinzuzufügen. Jedoch nicht im Bereich erlebt, ich bin auf der Suche nach ein paar Ratschläge, wie Sie feststellen, ob die Empfehlungen erforderlich sind oder nicht.
Muss ich die SQL Profiler, oder ist es besser, zu prüfen, den Code, der abfragt, um die Tabellen laufen? Und Sie haben keine andere Beratung?
Ich benutze Jason Strate-Index-Analyse-Skripte (Old Standort). Sie sagen Ihnen, wie viel Sie Ihr vorhandener Indizes verwendet wird, sowie wie viele fehlenden Indizes würden verwendet wurden. Ich füge normalerweise keine Indizes, wenn sie auf einem Tisch mehr als 5 oder 10% der Abfragen bilden.
Vor allem aber ist es darum, dass die Anwendung für die Benutzer schnell genug reagiert.
Doppel Update: In diesen Tagen, ich benutze sp_BlitzIndex® wenn Indexanalyse durchführen.
Es gibt ein paar Konzepte und Begriffe, die wichtig zu verstehen sind, wenn sie mit Indizes zu tun. Sucht, scannt und Lookups sind nur einige der Möglichkeiten, die Indizes wird durch select-Anweisungen verwendet werden. Die Selektivität von Schlüsselspalten ist ein integraler Bestandteil der Bestimmung, wie effektiv ein Index sein kann.
Ein Such geschieht, wenn der SQL Server Query Optimizer feststellt, dass der beste Weg, die Daten, die Sie innerhalb eines Index durch das Scannen eines Bereichs angefordert zu finden. Sucht der Regel passieren, wenn eine Abfrage „gedeckt“ durch einen Index, was bedeutet, die versuchen, Prädikate sind im Indexschlüssel und die angezeigten Spalten sind entweder im Schlüssel oder enthalten. Ein Scan passiert, wenn der SQL Server Query Optimizer feststellt, dass der beste Weg, um die Daten zu finden ist, den gesamten Index zu scannen und dann die Ergebnisse filtern. Ein Nachschlag tritt normalerweise auf, wenn ein Index enthält nicht alle angeforderten Spalten, entweder im Indexschlüssel oder in den eingeschlossenen Spalten. Der Abfrageoptimierer wird dann entweder die gruppierte Schlüssel (gegen einen Clustered-Index) oder die RID (gegen einen Haufen) auf „Lookup“ die anderen angeforderten Spalten.
Typischerweise Suchoperationen effizienter sind als Scans aufgrund physikalisch eine kleinere Datenmenge abfragen. Es gibt Situationen, in denen dies nicht der Fall ist, wie eine sehr kleine anfängliche Datensatz, aber das sprengt den Rahmen Ihrer Frage.
Um zu bestimmen, wie effektiv ein Index ist, müssen Sie die Selektivität Ihrer Indexschlüssel bestimmen. Selektivität kann als Prozentsatz der unterschiedlichen Datensätze Gesamt Datensätze definiert werden. Wenn ich eine [person] Tabelle mit 100 Einträgen gesamt habe und die [first_name] Spalte enthält 90 verschiedene Werte, können wir sagen, dass die [first_name] Spalte 90% selektiv ist. Je höher die Selektivität, desto effizienter ist der Indexschlüssel. Keeping Selektivität im Sinne, ist es am besten Ihre selektivsten Spalten zunächst in dem Indexschlüssel zu setzen. Mit meinem früheren [person] Beispiel, was passiert, wenn wir eine [nachname] Säule hatten, die 95% selektiv war? Wir möchten, einen Index erstellen mit [nachnamen], [first_name] als Indexschlüssel.
Ich weiß, das war ein bisschen langatmig Antwort, aber es gibt wirklich eine Menge Dinge, die in der Bestimmung gehen, wie effektiv ein Index sein wird, und eine Menge Dinge, die Sie müssen keine Performance-Gewinne gegenüber wiegen.
Dies hat einige gute Analyse von denen Indizes vorhanden sind, wie oft sie verwendet werden und wie oft die Abfrage-Engine für einen Index sucht, der nicht existiert.
Es ist Führung im Allgemeinen gut ist. Manchmal wird es ein bisschen über andeutend Ideen. Ich habe im Allgemeinen die folgenden bisher getan:
Ich habe alle empfohlenen Indizes nicht hinzugefügt, und haben wieder eine Woche später weg zu finden, dass sie nicht mehr, da die Abfrage-Engine wird empfohlen, anstelle einige der anderen neuen Indizes verwenden!
Generell sollten Sie Indizes vermeiden auf:
50%, die passen. Wenn es nach etwas speziellere im Index aufgeführt ist (zum Beispiel [Geburtsdatum, Geschlecht]), das ist besser - Sie könnten alle Männer in einer bestimmten Zeitspanne geboren werden sollen.
Abfragen zu ändern, Datenmengen zu ändern, neue Funktionen hinzugefügt werden, alte entfernt. Sie sollten einmal im Monat bei ihnen suchen (oder häufiger, wenn Sie hohe Volumen haben) und der Suche nach dem Sie die Datenbank helfen können!
Ihre Laufleistung variiert je nach Datenbank. Decken Sie das offensichtliche (Mitarbeiter Namen, Bestelldatum usw.) auf (jetzt / Zukunft) größere Tabellen. Überwachung, Überprüfung und ggf. einstellen. Es sollte Teil Ihrer Routine Checkliste, wenn Sie Ihre Datenbank (en) verwalten :)
Hoffe das hilft!
Ein guter Ansatz wäre die fehlende Indizes nach der Anzahl der sucht Abfrage zu sortieren, und prüfen Sie zuerst die oberen Indizes hinzufügen.
Es hängt davon ab, wie die Tabelle verwendet wird. z.B. können sagen, dass ich eine Tabelle haben, die eine Menge Zeit gelesen wird, aber Aktualisierungen und Einfügungen sind selten. Plus I Abfrage immer in der Tabelle auf einige Fremdschlüsselspalte. Es wird sinnvoll zu schaffen (nicht geclusterten) Index über diesen Fremdschlüssel Leseanfragen zu beschleunigen. Aber der Nachteil ist, wird Ihr Einsatz wird Update langsam.
Es gibt nur wenige Statistiken Abfragen, die sagen, wie viel Zeit Abfragen einnehmen. Beginnen Sie mit langsamsten. Wenn die Abfrage Prädikat keinen Index hat, wird die Schaffung einer helfen.