Heap-Speicher hat nichts mit diesen Heaps zu tun .
Heap bedeutet lediglich, dass die Datensätze selbst nicht geordnet (d. h. nicht miteinander verknüpft) sind.
Wenn Sie einen Datensatz einfügen, wird er einfach in den freien Speicherplatz eingefügt, den die Datenbank findet.
Das Aktualisieren einer Zeile in einer Heap-basierten Tabelle wirkt sich nicht auf andere Datensätze aus (obwohl es sich auf sekundäre Indizes auswirkt)
Wenn Sie einen sekundären Index auf einem HEAP
erstellen Tabelle, die RID
(eine Art physikalischer Zeiger auf den Speicherplatz) wird als Zeilenzeiger verwendet.
Gruppierter Index bedeutet, dass die Datensätze Teil eines B-Tree
sind . Wenn Sie einen Datensatz einfügen, wird der B-Tree
muss neu verknüpft werden.
Das Aktualisieren einer Zeile in einer geclusterten Tabelle verursacht eine Neuverknüpfung des B-Baums, d. e. Aktualisierung interner Zeiger in anderen Datensätzen.
Wenn Sie einen sekundären Index für eine gruppierte Tabelle erstellen, wird der Wert des gruppierten Indexschlüssels als Zeilenzeiger verwendet.
Das bedeutet, dass ein gruppierter Index eindeutig sein sollte. Wenn ein Clustered-Index nicht eindeutig ist, wird eine spezielle versteckte Spalte namens uniquifier
angezeigt wird an den Indexschlüssel angehängt, der if unique (und größer) macht.
Es ist auch erwähnenswert, dass das Erstellen eines sekundären Indexes für eine Spalte die Werte oder den Schlüssel des gruppierten Indexes zum Teil des Schlüssels des sekundären Indexes macht.
Indem Sie einen Index für eine geclusterte Tabelle erstellen, erhalten Sie tatsächlich immer einen zusammengesetzten Index
CREATE UNIQUE CLUSTERED INDEX CX_mytable_1234 (col1, col2, col3, col4)
CREATE INDEX IX_mytable_5678 (col5, col6, col7, col8)
Index IX_mytable_5678
ist tatsächlich ein Index für die folgenden Spalten:
col5
col6
col7
col8
col1
col2
col3
col4
Das hat noch einen Nebeneffekt:
Ein DESC
Bedingung in einem einspaltigen Index für eine gruppierte Tabelle ist in SQL Server
sinnvoll
Dieser Index:
CREATE INDEX IX_mytable ON mytable (col1)
kann in einer Abfrage wie dieser verwendet werden:
SELECT TOP 100 *
FROM mytable
ORDER BY
col1, id
, während dieses:
CREATE INDEX IX_mytable ON mytable (col1 DESC)
kann in einer Abfrage wie dieser verwendet werden:
SELECT TOP 100 *
FROM mytable
ORDER BY
col1, id DESC