Freigeben über


Heaps (Tabellen ohne gruppierte Indizes)

Ein Heap ist eine Tabelle ohne gruppierten Index. Mindestens ein nicht gruppierter Index kann auf Tabellen erstellt werden, die als Heap gespeichert sind. Daten werden im Heap gespeichert, ohne eine Reihenfolge anzugeben. In der Regel werden Daten zunächst in der Reihenfolge gespeichert, in der die Zeilen in die Tabelle eingefügt werden, aber das Datenbankmodul kann Daten im Heap verschieben, um die Zeilen effizient zu speichern; sodass die Datenreihenfolge nicht vorhergesagt werden kann. Um die Reihenfolge der zeilen zu garantieren, die von einem Heap zurückgegeben werden, müssen Sie die ORDER BY Klausel verwenden. Um die Reihenfolge für die Speicherung der Zeilen anzugeben, erstellen Sie einen gruppierten Index in der Tabelle, sodass die Tabelle kein Heap ist.

Hinweis

Es gibt manchmal gute Gründe, eine Tabelle als Heap zu behalten, anstatt einen gruppierten Index zu erstellen, aber die effektive Verwendung von Heaps erfordert fortgeschrittene Fähigkeiten. Die meisten Tabellen sollten über einen sorgfältig ausgewählten Clusterindex verfügen, es sei denn, es gibt einen guten Grund, die Tabelle als Heap zu belassen.

Wann man einen Heap verwenden sollte

Wenn eine Tabelle ein Heap ist und keine nicht gruppierten Indizes enthält, muss die gesamte Tabelle untersucht werden (ein Tabellenscan), um eine Zeile zu finden. Dies kann akzeptabel sein, wenn die Tabelle klein ist, z. B. eine Liste der 12 Regionalbüros eines Unternehmens.

Wenn eine Tabelle als Heap gespeichert wird, werden einzelne Zeilen durch Verweis auf einen Zeilenbezeichner (RID) identifiziert, der aus der Dateinummer, der Datenseitennummer und dem Steckplatz auf der Seite besteht. Die Zeilen-ID ist eine kleine und effiziente Struktur. Manchmal verwenden Datenarchitekten Heaps, wenn immer über nicht gruppierte Indizes auf Daten zugegriffen wird und die RID kleiner als ein gruppierter Indexschlüssel ist.

Wann kein Heap verwendet werden soll

Verwenden Sie keinen Heap, wenn die Daten häufig in einer sortierten Reihenfolge zurückgegeben werden. Ein gruppierter Index für die Sortierspalte kann den Sortiervorgang vermeiden.

Nutzen Sie keinen Heap, wenn die Daten häufig gruppiert werden. Daten müssen sortiert werden, bevor sie gruppiert werden, und ein gruppierter Index in der Sortierspalte kann den Sortiervorgang vermeiden.

Verwenden Sie keinen Heap, wenn Datenbereiche häufig aus der Tabelle abgefragt werden. Ein gruppierter Index in der Bereichsspalte verhindert das Sortieren des gesamten Heaps.

Verwenden Sie keinen Heap, wenn keine nicht gruppierten Indizes vorhanden sind und die Tabelle groß ist. In einem Heap müssen alle Zeilen des Heaps gelesen werden, um eine beliebige Zeile zu finden.

Verwalten von Heaps

Um einen Heap zu erstellen, erstellen Sie eine Tabelle ohne gruppierten Index. Wenn eine Tabelle bereits über einen gruppierten Index verfügt, legen Sie den gruppierten Index ab, um die Tabelle an einen Heap zurückzugeben.

Um einen Heap zu entfernen, erstellen Sie einen gruppierten Index auf dem Heap.

Wenn Sie einen Heap zum Freigeben des verschwendeten Speicherplatzes neu erstellen möchten, erstellen Sie einen gruppierten Index für den Heap, und legen Sie dann den gruppierten Index ab.

Warnung

Zum Erstellen oder Ablegen von gruppierten Indizes muss die gesamte Tabelle neu geschrieben werden. Wenn die Tabelle nicht gruppierte Indizes aufweist, müssen alle nicht gruppierten Indizes bei jeder Änderung des gruppierten Indexes neu erstellt werden. Daher kann der Wechsel von einem Heap zu einer gruppierten Indexstruktur oder zurück viel Zeit in Anspruch nehmen und Speicherplatz zum Neuanordnen von Daten in tempdb erfordern.

CREATE INDEX (Transact-SQL)

DROP INDEX (Transact-SQL)

Beschreibung von gruppierten und nicht gruppierten Indizes