(DE) 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. | (EN) When previously there had only been the choice of “Clustered or Non-Clustered,” now there are also Clustered Columnstore, Non-Clustered Columnstore, Nonclustered Hash und Nonclustered Range-Indexes. And since SQL Server 2016, these index types can be further combined. Simply put, now it is possible to combine both page-based indexes and memory-optimized tables with Columnstore indexes. |
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. | In order to quickly determine which combination in indexes is possible, I created a matrix that illustrates the combination options. Completed with additional information, you can download the “index cheat sheet” as a PDF document. This is how it looks: |
Download Herunterladen kann man es hier bei Technet: | Download You can download it here at Technet: |
gallery.technet.microsoft.com/Index-Cheat-Sheet-The-8378ac1b
Insgesamt sind gibt es also mittlerweile 4 verschiedene Basis-Strukturen:
| In total, there are now 4 different basic structures:
|
- Nicht enthalten sind: Indexed Views, XML-Indexe und Räumliche (Spatial) Indexe, sowie die Implikationen bei Sparse-Columns. - Unique Indexe habe ich nicht gesondert betrachtet, da sich diese für meine Betrachtung nicht anders als ihre Nicht-Unique Pedanten verhalten. | - Not included are: Indexed Views, XML-Indexes and spatial indexes, as well as the implications in Sparse-Columns. Generally, the latter are all still based on the page-based b-Tree indexes, but are significantly more restricted due to the data types partially based on CLR. - I did not consider Unique Indexes separately as for the purpose of my consideration they do not behave differently to the way their non-unique counterparts do. |
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 Limit auch nur Ansatzweise auszunutzen! | In addition, I have included a few basic rules and maximum limits. The attentive reader may notice that the maximum number of index columns in SQL Server 2016 has increased from 16 to 32. – But please do not regard it as an invitation to even attempt to exploit these limits! |
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. | I hope these overviews are a helpful mnemonic device not only for beginners but also for those who don’t always remember every single rule. Links for further readings at BOL are also listed. |
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. Folgende Artikel gab es zu diesen Themen bereits von mir: | Note: This overview is based on the current technical state: SQL Server 2016. There are already significant differences to SQL Server 2014, and even more to 2012. The following articles on these topics I have published before: |
- 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