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:
- Heaps
- Clustered Indexe page-basiert
- Clustered Columnstore Indexe und
- 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:
- The SQL Server 2016 In-Memory Evolution – from row-store to columnstore to in-memory operational analytics
- SQL Server 2016 – the Security & Performance Release / ein Sicherheits- und Performance-Release
- Artikel „SQL Server 2014 – Neues Fundament“ in iX Ausgabe 5/2014, Richtigstellungen zu In-Memory OLTP und ColumnStore Indexes und warum AlwaysOn nicht gleich Always On ist / SQL Server 2014 – New Fundament” in iX Issue 5/2014, corrections in In-Memory OLTP and ColumnStore Indexes, and why AlwaysOn is not the same as Always On
- The Columnstore Indexes & Batch Mode Processing (R)Evolution in SQL Server 2014
Happy Indexing
Andreas
Hinterlasse einen Kommentar
An der Diskussion beteiligen?Hinterlasse uns deinen Kommentar!