Index-Cheat-Sheet. Die vollständige Index-Kompatibilitäts-Matrix für SQL Server

Mit den insgesamt 4 neuen Indextypen, die uns seit SQL Server 2012 beschert wurden, gibt es nun auch insgesamt 4 Basis-Formate (Heap, Clustered Index, Clustered Columnstore Index, memory-optimized „varheap“) für die Speicherung von Daten in SQL Server. Und mit SQL Server 2016 sind diese obendrein in verschiedener Weise kombinierbar. In diesem Artikel stellt Andreas Wolter zwei übersichtliche „Kompatibilitäts-Matrixen“ zur Verfügung, aus denen man die Kombinationsmöglichkeiten schnell erschließen kann. Das Ganze kann man auch als einseitige pdf herunterladen und, wer mag, sich an die Wand hängen. 🙂

Mit dem Aufkommen der Columnstore Technologie und auch der In-Memory Technologie in SQL Server 2014 sind insgesamt 4 neue Indextypen zu den althergebrachten page-basierten hinzugekommen.

Wo es früher nur die Auswahl an „Clustered oder Non-Clustered“ (Deutsch auch „gruppiert oder nicht-gruppiert“) gab, gibt es mittlerweile auch Clustered Columnstore, Non-Clustered Columnstore, Nonclustered Hash und Nonclustered Range-Indexe.

Und seit SQL Server 2016 sind diese Indextypen untereinander noch weiter kombinierbar. Vereinfacht ausgedrückt lassen sich nun sowohl die Page-basierten Indexe als auch die Memory-optimierten Tabellen mit Columnstore Indexen kombinieren. Page(„Disk“)-basiert + Memory-optimimiert funktioniert jedoch nicht.

Um auf schnelle Weise sehen zu können, welche Kombination an Indexen möglich ist, habe ich eine Matrix erstellt, welche die Kombinationsmöglichkeiten darstellt. Angereichert mit Zusatzinformationen kann man den „Index-Spickzettel“ in Form einer pdf herunterladen. Und so sieht er dann aus:

Download

Herunterladen kann man es hier bei Technet:

gallery.technet.microsoft.com/Index-Cheat-Sheet-The-8378ac1b

Insgesamt gibt es also mittlerweile 4 verschiedene Basis-Strukturen:

  1. Heaps
  2. Clustered Indexe page-basiert
  3. Clustered Columnstore Indexe und
  4. sogenannte varHeaps, die Struktur der memory-optimierten Tabellen.

Nicht enthalten sind: Indexed Views, XML-Indexe und Räumliche (Spatial) Indexe, sowie die Implikationen bei Sparse-Columns. Prinzipiell basieren auch diese alle noch auf den page-basierten b-Tree Indexen, sind durch die teilweise auf der CLR basierenden Datentypen jedoch wesentlich eingeschränkter.

– Unique Indexe habe ich nicht gesondert betrachtet, da sich diese für meine Betrachtung nicht anders als ihre Nicht-Unique Pedanten verhalten.

Zusätzlich habe ich noch einige Grundregeln und Höchstgrenzen mit aufgenommen. Dem aufmerksamen Leser wird dabei vielleicht auffallen, dass die maximale Anzahl der Index-Spalten in SQL Server 2016 von 16 auf 32 angehoben worden ist. – Bitte seht das aber nicht als Einladung an, diese Limits auch nur ansatzweise auszunutzen!

Ich hoffe, diese Übersichten sind eine hilfreiche Erinnerungsstütze nicht nur für Einsteiger, sondern auch für solche, die sich nicht immer an jede Regel erinnern können. Zum Weiterlesen sind auch einige Links auf BOL hinterlegt.

Hinweis: Die Übersicht basiert auf dem aktuellen Stand der Technik: SQL Server 2016. Bereits gegenüber SQL Server 2014 gibt es wesentliche Unterschiede, und viel mehr noch zu 2012. Kurz zusammengefasst gab es in der Version 2012 noch keine Memory-optimierten Tabellen und Clustered Columnstore Indexe. Diese kamen erst 2014 in den SQL Server. Und erst im 2016er gibt es die Kombinationsmöglichkeiten.

Folgende Artikel gab es zu diesen Themen bereits von mir:

Happy Indexing

Andreas

0 Kommentare

Hinterlasse einen Kommentar

An der Diskussion beteiligen?
Hinterlasse uns deinen Kommentar!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert