SQL Server: Heap vs. gruppierter Index

Eine Frage der Datenhaltung

In Microsoft SQL Server lassen sich Daten entweder in Form gruppierter Indexe oder von Heaps – also nicht-gruppiert – abspeichern. Jede Variante hat ihre Stärken, aber auch Schwächen und eignet sich für bestimmte Anwendungsfälle. Falsch eingesetzt, bremsen Sie im schlimmsten Fall Ihren Datenbankserver ordentlich aus. Welches Verfahren für welches Szenario geeignet ist, lesen Sie in diesem Beitrag.
'Datenbanken' lautet der Schwerpunkt der Dezember-Ausgabe des IT-Administrator. Darin werfen wir einen Blick auf den Firewall-Schutz und das ... (mehr)

Datenbankexperten wissen, dass ein ideales Design einer Tabelle in einem Microsoft SQL Server mit der Implementierung eines gruppierten Indexes einhergeht. Schauen wir uns die Empfehlungen für einen gruppierten Index an, finden wir regelmäßig folgende Hinweise für dessen ideale Eigenschaften:

- Kleiner Datentyp: Jeder nicht-gruppierte Index benötigt als Verweis zur Tabelle das Schlüsselattribut des gruppierten Indexes. Je kleiner der Datentyp, desto weniger Platz benötigt ein nicht-gruppierter Index.

- Eindeutige Werte: Ist ein Schlüsselattribut nicht eindeutig, müssen weitere 4 Bytes für einen UNIQUIFIER gespeichert werden. Damit erhöht sich der Speicherbereich für die Schlüsselwerte um 4 Bytes. Gleiches gilt für die Speicherung des Schlüssels in nicht-gruppierten Indexen.

- Statische Werte: Ein Schlüsselwert sollte sich nicht verändern, da der Datensatz ansonsten an einer anderen Stelle im Index wieder eingeordnet werden muss. Für ein stark frequentiertes OLTP-System bedeutet das einen nicht unerheblichen Aufwand im Transaktionsvolumen. Dies ist einer der Gründe für die Beliebtheit von IDENTITY()-Eigenschaften für das Schlüsselattribut.

- Fortlaufende Werte: Fortlaufende Werte gewährleisten, dass keine teuren Page Splits durchgeführt werden müssen. Sofern neue Datensätze immer am Ende der Tabelle eingetragen werden, müssen keine bestehenden Datensätze verschoben werden.

Viele Datenbanken folgen diesen Empfehlungen. Bei der Implementierung wird jedoch zu selten hinterfragt, ob nicht eventuell die Nutzung eines Heap, also nicht-gruppierter Daten, besser wäre.

Heap: Tabelle ohne gruppierten Index

Ein Heap ist eine Tabelle in Microsoft SQL Server ohne gruppierten Index [1], wobei Sie einen oder mehrere nicht-gruppierte Indexe für Heaps erstellen können. Die Daten werden ohne bestimmte Reihenfolge in einem Heap gespeichert, die Abfolge

...

Der komplette Artikel ist nur für Abonnenten des ADMIN Archiv-Abos verfügbar.

comments powered by Disqus

Artikel der Woche

Eigene Registry für Docker-Images

Wer selber Docker-Images herstellt, braucht auch eine eigene Registry. Diese gibt es ebenfalls als Docker-Image, aber nur mit eingeschränkter Funktionalität. Mit einem Auth-Server wird daraus ein brauchbares Repository für Images. (mehr)
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Google+

Ausgabe /2019