Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

SQL Server: Performance-Optimierung

Das Management von Indizes auf einen Blick

Testen Sie unsere 2017 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Dieser Film nimmt die Themen der folgenden Videos kurz vorweg und führt in das Kapitel ein.
04:17

Transkript

Nachdem klar ist, welcher Typ von Index in welchem Szenario am besten eingesetzt werden kann, zeigt dieses Kapitel, wie ich Indizes nun praktisch anlege und worauf ich da achten sollte, wie ich Indizes managen kann, das heißt, wie ich entsprechend dafür sorgen kann, dass sie vernünftig gewartet werden und wie ich letztendlich einen Index, den ich nicht mehr brauche, wieder löschen kann. Dafür zeige ich Ihnen nacheinander, wie man welchen Index genau anlegt, worauf man da im Speziellen achten muss. Zunächst beginnen wir mit dem Non Clustered Index. Hier hat man die Möglichkeit, so etwas wie einen Filter und "Include"-Spalten anzugeben und ich kann bestimmen, welcher Index "unique" sein soll. Das heißt, welche Wertekombination, die der Index abdeckt, eindeutig sein soll. Zunächst einmal zum "filtered", das ist eine ganz nette Sache. Der SQL-Server bietet die Möglichkeit, Filter so aufzubauen, dass ich nicht zwangsläufig alle Zeilen in den Index mit aufnehme, sondern nur solche, die entsprechend gewissen Prädikaten, wie bei der SELECT-Abfrage, entsprechen. Damit habe ich die Chance, auch bei umfangreichen Tabellen den Index möglichst klein und kompakt zu halten und damit erst einmal tendenziell relativ performant. Das ist eine nette Geschichte. Wenn ich beispielsweise eine Tabelle habe, wo ich Zeilen nur logisch lösche, möglicherweise indem ich eine Ist-gelöscht-Spalte von "false" auf "true" setze und dann kann ich sagen, ok, ich möchte zwar einen Index auf die Tabelle haben, aber mich interessieren nicht die gelöschten sondern nur die nicht gelöschten Zeilen. Und dann kann ich einfach sagen, "WHERE", ist gelöscht, "=false" und damit habe ich genau sichergestellt, dass diese Zeile nicht mit in den Index wandert. Die Include-Spalten sind etwas abstrakter zu sehen, "Include-Spalten" bedeuten, dass ich hingehen kann und in einen Index Spalten mit aufnehmen, die zwar nicht wirklich indexiert sind, sondern die quasi als Ballast oder als Nutzlast mit in den Index aufgenommen werden. Der Gedanke dahinter ist, dass ich dann die Möglichkeit habe, komplette Operationen auszuführen, beispielsweise die Summe über eine gewisse Spalte, ohne dass ich von dem Index auf die Tabelle wechseln muss beziehungsweise der SQL-Server tut das für mich natürlich im Hintergrund. Also ich habe damit die Möglichkeit, die IOs, die ich letztendlich erzeuge, zu minimieren. Hier kann es zum Beispiel ein Beispiel sein, dass ich sage, ich möchte alle Spalten summieren, beispielsweise eine Spalte A oder eine Spalte B möchte ich summieren und gefiltert nach Spalte C. Wenn diese Spalten A und B, die ich summieren möchte, nicht in den Index inkludiert sind, bedeutet das dann für den SQL-Server, dass er hingehen muss, den Filter auf Spalte C ausführen und dann jeweils für die entsprechenden Treffer einen Blick in die Tabelle werden muss, um die Werte für Spalte A und Spalte B herauszubekommen. Wenn ich das wiederum direkt in den Index einfüge, dann muss er diesen Schritt vom Index hin zur Tabelle nicht machen. Vorteil ist natürlich, wie gesagt, ich spare mir damit IO. Nachteil ist natürlich, der Index wird größer, weil es ist nur sozusagen Ballast oder Nutzlast, die mitgeschleppt wird, wie ich schon sagte, und letztendlich wird der Index damit natürlich umfangreicher. Dann kann ich bei dem Index angeben, ob er "unique" sein soll. Das hat zwei Effekte: Zum einen natürlich, dass der SQL-Server seine Abfragen optimieren kann. Wenn er einen Treffer gefunden hat, kann er aufhören, weil per Definition darf es ja keine zweite Zeile geben. Zum anderen kann ich das natürlich als Designwerkzeug auch benutzen für meine Datenbank, wenn ich möchte, dass gewisse Kombinationen an Werten eindeutig sind. Dann gibt es den Clustered Index, den wir anlegen werden. Hier kann ich nur sagen, dass er "unique" sein soll, "filtered" und "included" würde keinen Sinn machen. Der Clustered Index ist die Tabelle und die Tabelle ist der Clustered Index. Es wäre absolut sinnfrei, etwas herauszufiltern und na ja, letztendlich, da der Index die Tabelle selber ist, sind natürlich automatisch alle Spalten inkludiert, das geht gar nicht anders. Und wie man entsprechend den Clustered ColumnStore Index anlegt, das ist die in dem Fall wahrscheinlich einfachste Variante, und hier kann ich nichts weiter festlegen, außer dem Clustered ColumnStore Index, der dann immer über die gesamte Breite auch der Tabelle geht.

SQL Server: Performance-Optimierung

Lernen Sie den Umgang mit Indizis und Tools, um die Leistungsfähigkiet Ihrer SQL Server Datenbank effektiv zu erhöhen.

3 Std. 20 min (32 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Hersteller:
Software:
Exklusiv für Abo-Kunden
Erscheinungsdatum:04.05.2017

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!