Stellen Sie sich einen B-Tree-Index für einen Wert vor, der immer monoton ansteigt, z. B. eine Spalte vom Typ IDENTITY. Bei einer herkömmlichen B-Tree-Implementierung wird ein Knoten, wenn er voll ist, zu 50% / 50% aufgeteilt, und wir erhalten einen B-Tree, in dem (fast) alle Knoten nur zu 50% voll sind.
Ich weiß, dass Oracle erkennt, wenn ein Wert ständig steigt, und in diesen Fällen führt Oracle stattdessen eine Aufteilung von 90% / 10% durch. Auf diese Weise sind (fast) alle Knoten zu 90% voll, und für diese häufig vorkommenden Fälle wird eine weitaus bessere Seitennutzung erzielt.
Ich konnte keine Dokumentation für eine ähnliche Funktion in SQL Server finden. Ich habe jedoch zwei Experimente durchgeführt, bei denen ich N zufällige Ganzzahlen und N aufeinanderfolgende Ganzzahlen in einen Index eingefügt habe. Der erstere Fall verwendete weit mehr Seiten, der letztere.
Bietet SQL Server eine ähnliche Funktionalität? Wenn ja: Können Sie mich auf eine Dokumentation zu dieser Funktion verweisen?
UPDATE: Durch die unten angegebenen Experimente scheinen die Blattknoten nicht geteilt zu sein und die internen Knoten sind zu 50% / 50% geteilt. Das macht B-Bäume bei zunehmenden Schlüsseln kompakter als bei zufälligen Schlüsseln. Der 90% / 10% -Ansatz von Oracle ist jedoch noch besser, und ich suche immer noch nach einer offiziellen Dokumentation, die das in Experimenten beobachtete Verhalten überprüfen kann.
quelle
Antworten:
Wenn am Ende des Index eine Zeile hinzugefügt wird, wird der Zeile nur eine neue Seite zugewiesen, anstatt die aktuelle Endseite zu teilen. Experimentelle Beweise dafür finden Sie unten (verwendet die
%%physloc%%
Funktion, die SQL Server 2008 erfordert). Siehe auch die Diskussion hier .Rückgabe (Ihre Ergebnisse variieren)
Dies scheint jedoch nur für Blattknoten zu gelten. Dies können Sie sehen, indem Sie die folgenden Schritte ausführen und den
TOP
Wert anpassen . Für mich622/623
war der Grenzwert zwischen der Anforderung von einer und zwei Seiten der ersten Ebene (kann variieren, wenn Sie die Snapshot-Isolation aktiviert haben?). Die Seite wird ausgewogen aufgeteilt, was zu einer Verschwendung von Speicherplatz auf dieser Ebene führt.quelle
PRIMARY KEY
.DBCC IND
undsys.dm_db_index_physical_stats
Informationen anzeigen.