Indexing Dos und Don'ts, Microsoft SQL Server Inhalt von SQL Server Pro

Die Indizierung ist ein so großes Thema, das immer im Griff, was zu tun ist und was nicht zu tun, wenn Sie Ihre Indizierung Strategien entwickeln können schwierig sein. Sie erstellen Indizes Abfrageantwortzeit zu verbessern. Aber Indizierung ist ein Balanceakt.







Jeder Index ist eine System-Managed-Tabelle, so dass jede Ergänzung oder Änderung der Daten in einer Benutzertabelle beinhaltet möglicherweise die Indizes zu aktualisieren, die geringere Leistung von Daten-Updates verursachen kann. Jeder-vom Produkthersteller zum Datenbank-Performance-Spezialisten zu DBAs, die auf der Produktion Front arbeiten Linien-Ideen hat, wie und wann zu indizieren. Hier ist meine persönliche Liste der Dos und Don'ts.

Haben Index die Fremdschlüsselspalte

Betrachten Sie ein Covering Index für Abfragen mit, dass nur wenige Spalten zurückgeben

Ein abdeckenden Index enthält alle Spalten in allen Teilen einer Abfrage, einschließlich der FROM und WHERE-Klauseln. Wenn SQL Server kann den Index scannen die Daten zu finden, es braucht, ist es nicht die zugehörigen Datenseiten lesen müssen. Folglich verbessert die Abfrageleistung. Zum Beispiel in der Tabelle Authors in der Pubs-Datenbank, die aunmind Index Abdeckung besteht aus Autor Nachnamen (au_lname) und Autor Vornamen (au_fname). Normalerweise, wenn Sie angeben, unterschiedlich in Ihrer Abfrage, SQL Server wird entscheiden, ob ein Index verwendet. Wenn Sie mit kleinen Tabellen-Tabellen arbeiten sind die -SQL Server passen auf einer oder zwei Seiten (auf der Festplatte 8K Blöcke von Raum) wählt eine Tabelle auszuführen scannen, anstatt einen Index zu verwenden. Für kleine Tische, ein Table-Scan (die nur ein Festplattenzugriff erfordert) ist weniger kostspielig als einen Index zu lesen, die Position der Datenzeilen zu finden, dann die Datenzeilen zu lesen (die zwei Festplatten erfordert Zugriffe). Aber für eine Abfrage wie

Sie Betrachten Sie einen Clustered-Index für große Tabellen und Range-of-Werte von Abfragen mit

Ein gruppierten Index bestimmt die Speicherreihenfolge der Datensätze auf dem Datenträger. Die Autoren-Tabelle wird auf Au_id gruppiert, so au_id ist der gruppierte Schlüssel. Wenn Sie abfragen, um die Tabelle Autoren ohne Bestellung Kriterien festlegt, wie folgt:







Die Ergebnisse können in gruppierten Schlüssel, um anzuzeigen (beispielsweise der niedrigste Wert von Au_id an der Spitze der Liste angezeigt werden könnte, wie Abbildung 2 zeigt). In SQL Server 7.0 und späteren Versionen, Bestellung der Ergebnismenge kann variieren, abhängig von der Abrufstrategie, die der Abfrageoptimierer wählt. Daher zählt nicht aktenkundig Bestellung. Verwenden Sie stattdessen die ORDER BY-Option in Ihren Abfragen. Wenn Sie jedoch einen großen Tisch haben, insbesondere eine Tabelle, die Sie häufig abgefragt werden durch eine Reihe von Werte Zustand auf den gruppierten Schlüssel (zB WHERE Au_id zwischen ‚400-00-0000‘ und ‚499-99-9999‘) wird die Abfrageleistung verbessern, wenn Sie einen Clustered-Index verwenden. Wenn Sie diese Tabelle zu anderen Tabellen verbinden und der gruppierte Schlüssel ist auch eine verknüpfte Spalte, die Abfrageleistung JOIN könnte als besser sein, wenn die Abfrage ausgeführt die ohne einen gruppierten Index beitreten.

Haben Index Sortieren, Gruppieren und Aggregieren von Spalten

Sie müssen auch die Indizierung Spalten betrachten, die Sie verwenden, um und diejenigen, die Sie in einer Gruppierung Ausdruck verwenden. Sie könnten die Spalten von der Indizierung profitieren, die die MIN (), MAX (), COUNT (), SUM () und AVG () Funktionen, die Daten zu aggregieren verwenden. Wenn Sie die MIN () und MAX () Funktionen zu verwenden, macht SQL Server eine einfache Suche nach der Minimal- und Maximalwerten in der Spalte ist. Wenn ein Datenwert des Index in aufsteigender Reihenfolge angeordnet ist, SQL Server den Index schnell lesen können, um die richtigen Werte von MIN zu bestimmen () oder MAX (). Der Bereich von Werteabfrage enthält einen Filter oder Constraint (in der SELECT-Abfrage ausgedrückt ist WHERE-Klausel oder HAVING-Klausel) die Zeilen, die die Abfrage zu begrenzen. Ebenso, wenn Sie einen Index haben, können Sie optimieren das Sortieren von Daten (durch die ORDER BY-Klausel) und Datengruppierung (durch die GROUP BY-Klausel), vor allem, wenn die Tabelle oder Tabellen, die Sie Abfragen sind viele Zeilen enthalten.

Betrachten Sie eine DSS

Und die DSS muss nicht unbedingt zu schreibgeschützt: Sie Blick auf den DSS erstellen können, die ausgelegt sind, Bericht-Schreiben zu erleichtern und die, aufgrund ihrer Komplexität, Daten über eine Sicht Akt gesehen machen, als ob es schreibgeschützt ist . Wenn Sie eine DSS implementieren, können Sie die Abfrage Last von Ihren Transaktionsdatenbank übernehmen, indem sie die am häufigsten ausgeführten Abfragen zu analysieren, das Erstellen von Indizes für die Tabellen abdeckt und eine effektive indizierte Sichten für die Daten zu schaffen.

Nicht über-Index transaktionssicheren Tabellen mit hohen E / A-Aktivität

Ein zweischneidiges Schwert

Die richtige Indizierung kann eine träge Datenbank macht eine bessere Leistung. Im Gegensatz dazu kann es bei unsachgemäßer Indizierung einen hochleistungsfähigen Datenbank schlecht laufen lassen. Der Unterschied hängt davon ab, wie Sie die Struktur Indizes-und auf dem Follow-up. Sie müssen die Wirkung eines neu erstellten Index für die Produktionsumgebung testen und zu beobachten, und Sie müssen Indizes entfernen, die Ihre Datenbank die Leistung beeinträchtigen. Ihre Indexierungsstrategie ist ein wichtiger Teil Ihrer Verantwortung als physikalische Daten-Modellierer und DBA.







In Verbindung stehende Artikel