Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Führen Sie die folgenden Schritte aus, um den Speicherplatz zu schätzen, der zum Speichern eines nicht gruppierten Indexes erforderlich ist:
Berechnen von Variablen für die Verwendung in schritt 2 und 3.
Berechnen Sie den Speicherplatz, der benötigt wird, um Indexinformationen in der Blattebene des nicht gruppierten Indexes zu speichern.
Berechnen Sie den Speicherplatz, der zum Speichern von Indexinformationen in den Nicht-Blatt-Ebenen des nicht gruppierten Index benötigt wird.
Summe der berechneten Werte.
Schritt 1. Berechnen von Variablen für die Verwendung in schritt 2 und 3
Mit den folgenden Schritten können Sie Variablen berechnen, die zum Abschätzen des Speicherplatzes verwendet werden, der zum Speichern der oberen Ebenen des Indexes erforderlich ist.
Geben Sie die Anzahl der Zeilen an, die in der Tabelle vorhanden sein werden:
Num_Rows = Anzahl der Zeilen in der Tabelle
Geben Sie die Anzahl der Spalten mit fester Länge und variabler Länge im Indexschlüssel an, und berechnen Sie den erforderlichen Speicherplatz.
Die Schlüsselspalten eines Indexes können Spalten mit fester Länge und Variabler Länge enthalten. Um die Indexzeilengröße auf Innenebene zu schätzen, berechnen Sie den Abstand, den jede dieser Spaltengruppen innerhalb der Indexzeile einnimmt. Die Größe einer Spalte hängt vom Datentyp und der Längenangabe ab.
Num_Key_Cols = Gesamtanzahl der Schlüsselspalten (feste Länge und variable Länge)
Fixed_Key_Size = Gesamtbytegröße aller Schlüsselspalten mit fester Länge
Num_Variable_Key_Cols = Anzahl der Schlüsselspalten variabler Länge
Max_Var_Key_Size = maximale Bytegröße aller Spalten mit variabler Länge
Berücksichtigen Sie den Datenzeilen-Locator, der erforderlich ist, wenn der Index nicht eindeutig ist:
Wenn der nicht gruppierte Index nicht eindeutig ist, wird der Datenzeilen-Locator mit dem nicht gruppierten Indexschlüssel kombiniert, um einen eindeutigen Schlüsselwert für jede Zeile zu erzeugen.
Wenn der nicht gruppierte Index über einem Heap liegt, ist der Datenzeilen-Locator der Heap RID. Dies ist eine Größe von 8 Byte.
= Num_Key_ColsNum_Key_Cols + 1
= Num_Variable_Key_ColsNum_Variable_Key_Cols + 1
= Max_Var_Key_SizeMax_Var_Key_Size + 8
Wenn der nicht gruppierte Index über einem gruppierten Index liegt, ist der Datenzeilen-Locator der Clusteringschlüssel. Die Spalten, die mit dem nicht gruppierten Indexschlüssel kombiniert werden müssen, sind die Spalten im Clusterschlüssel, die nicht bereits in der Gruppe nicht gruppierter Indexschlüsselspalten vorhanden sind.
= Num_Key_ColsNum_Key_Cols + Anzahl der Clusterschlüsselspalten, die sich nicht in der Gruppe nicht gruppierter Indexschlüsselspalten befinden (+ 1, wenn der gruppierte Index nicht ununique ist)
= Fixed_Key_SizeFixed_Key_Size + Gesamtbytegröße von Clusterschlüsselspalten mit fester Länge außerhalb der Menge der nicht gruppierten Indexschlüsselspalten
= Num_Variable_Key_ColsNum_Variable_Key_Cols + Anzahl der Clusterschlüsselspalten mit variabler Länge, die nicht in der Menge der nicht gruppierten Indexschlüsselspalten enthalten sind (+ 1, wenn der gruppierte Index nicht eindeutig ist)
= Max_Var_Key_SizeMax_Var_Key_Size + maximale Bytegröße der Clustering-Schlüsselspalten variabler Länge, die nicht in der Gruppe der nicht gruppierten Indexschlüsselspalten enthalten sind (+ 4, wenn der gruppierte Index nicht eindeutig ist)
Ein Teil der Zeile, der als NULL-Bitmap bekannt ist, kann reserviert werden, um die Nullbarkeit der Spalten zu verwalten. Berechnen der Größe:
Wenn im Indexschlüssel nullfähige Spalten vorhanden sind, einschließlich aller erforderlichen Clusterschlüsselspalten, wie in Schritt 1.3 beschrieben, ist ein Teil der Indexzeile für die NULL-Bitmap reserviert.
Index_Null_Bitmap = 2 + ((Anzahl der Spalten in der Indexzeile + 7) / 8)
Es sollte nur der ganzzahlige Teil des vorherigen Ausdrucks verwendet werden. Verwerfen Sie alle Restlichen.
Wenn keine Null-Schlüsselspalten vorhanden sind, legen Sie Index_Null_Bitmap auf 0 fest.
Berechnen Sie die Datengröße der variablen Länge:
Wenn im Indexschlüssel Spalten mit variabler Länge vorhanden sind, einschließlich aller erforderlichen Spalten mit gruppierten Indexschlüsseln, bestimmen Sie, wie viel Platz zum Speichern der Spalten in der Indexzeile verwendet wird:
Variable_Key_Size = 2 + (Num_Variable_Key_Cols x 2) + Max_Var_Key_Size
Die zu Max_Var_Key_Size hinzugefügten Bytes dienen zum Nachverfolgen der einzelnen Variablenspalten. Bei dieser Formel wird davon ausgegangen, dass alle Spalten mit variabler Länge 100 Prozent voll sind. Wenn Sie davon ausgehen, dass ein kleinerer Prozentsatz des Speicherplatzes für spaltenvariable Spalten verwendet wird, können Sie den Max_Var_Key_Size Wert um diesen Prozentsatz anpassen, um eine genauere Schätzung der Gesamttabellengröße zu erzielen.
Wenn keine Spalten mit variabler Länge vorhanden sind, legen Sie Variable_Key_Size auf 0 fest.
Berechnen der Indexzeilengröße:
Index_zeilengröße = Feste_Schlüsselgröße + Variable_Schlüsselgröße + Index_Null_Bitmap + 1 (für den Kopf einer Indexzeile) + 6 (für den Verweis auf die untergeordnete Seiten-ID)
Berechnen sie die Anzahl der Indexzeilen pro Seite (8096 freie Bytes pro Seite):
Index_Rows_Per_Page = 8096 / (Index_Row_Size + 2)
Da Indexzeilen keine Seiten umfassen, sollte die Anzahl der Indexzeilen pro Seite auf die nächste ganze Zeile abgerundet werden. Die 2 in der Formel bezieht sich auf den Eintrag der Zeile im Slot-Array der Seite.
Schritt 2. Berechnen des zum Speichern von Indexinformationen in der Blattebene verwendeten Platz
Mit den folgenden Schritten können Sie den Speicherplatz schätzen, der zum Speichern der Blattebene des Indexes erforderlich ist. Sie benötigen die Werte, die in Schritt 1 beibehalten werden, um diesen Schritt abzuschließen.
Geben Sie die Anzahl der Spalten mit fester Länge und variabler Länge auf Blattebene an, und berechnen Sie den dafür erforderlichen Speicherplatz.
Hinweis
Sie können einen nicht gruppierten Index erweitern, indem Sie zusätzlich zu den Indexschlüsselspalten nichtschlüsselspalten einschließen. Diese zusätzlichen Spalten werden nur auf der Blattebene des nicht gruppierten Index gespeichert. Weitere Informationen finden Sie unter Create Indexes with Included Columns.
Hinweis
Sie können
varchar,nvarchar,varbinaryodersql_variantSpalten kombinieren, die dazu führen, dass die gesamte definierte Tabellenbreite 8.060 Bytes überschreitet. Die Länge jeder dieser Spalten muss weiterhin innerhalb des Grenzwerts von 8.000 Bytes für einevarchar,varbinaryodersql_variantSpalte und 4.000 Bytes für einenvarcharSpalte liegen. Ihre kombinierten Breiten können jedoch den Grenzwert von 8.060 Byte in einer Tabelle überschreiten. Dies gilt auch für nicht gruppierte Indexblattzeilen, die Spalten enthalten.Wenn der nicht gruppierte Index keine eingeschlossenen Spalten enthält, verwenden Sie die Werte aus Schritt 1, einschließlich aller in Schritt 1.3 festgelegten Änderungen:
= Num_Leaf_ColsNum_Key_Cols
Fixed_Leaf_Size = Fixed_Key_Size
= Num_Variable_Leaf_ColsNum_Variable_Key_Cols
Max_Var_Leaf_Size = Max_Var_Key_Size
Wenn der nicht gruppierte Index Spalten enthält, fügen Sie die entsprechenden Werte zu den Werten aus Schritt 1 hinzu, einschließlich aller Änderungen in Schritt 1.3. Die Größe einer Spalte hängt vom Datentyp und der Längenangabe ab. Weitere Informationen finden Sie unter Datentypen (Transact-SQL).
= Num_Leaf_ColsNum_Key_Cols + Anzahl der enthaltenen Spalten
= Fixed_Leaf_SizeFixed_Key_Size + Gesamtbytegröße der eingeschlossenen Spalten mit fester Länge
Num_Variable_Leaf_Cols = Num_Variable_Key_Cols + Anzahl der enthaltenen Spalten mit variabler Länge
= Max_Var_Leaf_SizeMax_Var_Key_Size + maximale Bytegröße variabler Länge enthaltener Spalten
Berücksichtigen Sie den Datenzeilen-Lokator:
Wenn der nicht gruppierte Index nicht eindeutig ist, wurde der Aufwand für den Datenzeilen-Locator bereits in Schritt 1.3 berücksichtigt, und es sind keine zusätzlichen Änderungen erforderlich. Gehen Sie zum nächsten Schritt über.
Wenn der nicht gruppierte Index eindeutig ist, muss der Datenzeilen-Locator in allen Zeilen auf Blattebene berücksichtigt werden.
Wenn der nicht gruppierte Index über einem Heap liegt, ist der Datenzeilen-Locator der Heap RID (Größe 8 Byte).
Num_Leaf_Cols = Num_Leaf_Cols + 1
= Num_Variable_Leaf_ColsNum_Variable_Leaf_Cols + 1
= Max_Var_Leaf_SizeMax_Var_Leaf_Size + 8
Wenn der nicht gruppierte Index über einem gruppierten Index liegt, ist der Datenzeilen-Locator der Clusteringschlüssel. Die Spalten, die mit dem nicht gruppierten Indexschlüssel kombiniert werden müssen, sind die Spalten im Clusterschlüssel, die nicht bereits in der Gruppe nicht gruppierter Indexschlüsselspalten vorhanden sind.
= Num_Leaf_ColsNum_Leaf_Cols + Anzahl der Clusterschlüsselspalten, die sich nicht in der Gruppe nicht gruppierter Indexschlüsselspalten befinden (+ 1, wenn der gruppierte Index nicht ununique ist)
Fixed_Leaf_Size = Fixed_Leaf_Size + Anzahl der Clustering-Schlüsselspalten mit fester Länge, die nicht zu den Schlüsselspalten des nicht gruppierten Index gehören
= Num_Variable_Leaf_ColsNum_Variable_Leaf_Cols + Anzahl der Clusterschlüsselspalten variabler Länge, die sich nicht in der Gruppe nicht gruppierter Indexschlüsselspalten befinden (+ 1, wenn der gruppierte Index nicht ununique ist)
= Max_Var_Leaf_SizeMax_Var_Leaf_Size + Größe in Byte der Clusterschlüsselspalten variabler Länge nicht in der Gruppe nicht gruppierter Indexschlüsselspalten (+ 4, wenn der gruppierte Index nicht ununique ist)
Berechnen sie die Null-Bitmapgröße:
Leaf_Null_Bitmap = 2 + ((Num_Leaf_Cols + 7) / 8)
Es sollte nur der ganzzahlige Teil des vorherigen Ausdrucks verwendet werden. Verwerfen Sie alle Restlichen.
Berechnen sie die Datengröße der variablen Länge:
Wenn im Indexschlüssel Spalten mit variabler Länge vorhanden sind, einschließlich aller erforderlichen Clusterschlüsselspalten, wie in Schritt 2.2 beschrieben, bestimmen Sie, wie viel Platz zum Speichern der Spalten in der Indexzeile verwendet wird:
Variable_Leaf_Size = 2 + (Num_Variable_Leaf_Cols x 2) + Max_Var_Leaf_Size
Die zu Max_Var_Key_Size hinzugefügten Bytes dienen zum Nachverfolgen der einzelnen Variablenspalten. Bei dieser Formel wird davon ausgegangen, dass alle Spalten mit variabler Länge 100 Prozent voll sind. Wenn Sie davon ausgehen, dass ein kleinerer Prozentsatz des Speicherplatzes für spaltenvariable Spalten verwendet wird, können Sie den Max_Var_Leaf_Size Wert um diesen Prozentsatz anpassen, um eine genauere Schätzung der Gesamttabellengröße zu erzielen.
Wenn keine Spalten mit variabler Länge vorhanden sind, legen Sie Variable_Leaf_Size auf 0 fest.
Berechnen der Indexzeilengröße:
= Leaf_Row_Size + Fixed_Leaf_Size + Variable_Leaf_SizeLeaf_Null_Bitmap + 1 (für den Zeilenüberkopf einer Indexzeile) + 6 (für den Zeiger der untergeordneten Seiten-ID)
Berechnen sie die Anzahl der Indexzeilen pro Seite (8096 freie Bytes pro Seite):
Leaf_Rows_Per_Page = 8096 / (Leaf_Row_Size + 2)
Da Indexzeilen keine Seiten umfassen, sollte die Anzahl der Indexzeilen pro Seite auf die nächste ganze Zeile abgerundet werden. Die 2 in der Formel ist für den Zeileneintrag im Slotarray der Seite vorgesehen.
Berechnen Sie die Anzahl der reservierten freien Zeilen pro Seite basierend auf dem angegebenen Füllfaktor :
Free_Rows_Per_Page = 8096 x ((100 - Fill_Factor) / 100) / (Leaf_Row_Size + 2)
Der in der Berechnung verwendete Füllfaktor ist ein ganzzahliger Wert anstelle eines Prozentsatzes. Da Zeilen keine Seiten umfassen, sollte die Anzahl der Zeilen pro Seite auf die nächste ganze Zeile abgerundet werden. Wenn der Füllfaktor wächst, werden mehr Daten auf jeder Seite gespeichert, und es werden weniger Seiten vorhanden sein. Die 2 in der Formel ist für den Zeileneintrag im Slotarray der Seite vorgesehen.
Berechnen Sie die Anzahl der Seiten, die zum Speichern aller Zeilen erforderlich sind:
= Num_Leaf_PagesNum_Rows / (Leaf_Rows_Per_Page - Free_Rows_Per_Page)
Die Anzahl der geschätzten Seiten sollte auf die nächste ganze Seite aufgerundet werden.
Berechnen der Größe des Indexes (8192 Byte pro Seite):
Leaf_Space_Used = 8192 x Num_Leaf_Pages
Schritt 3. Berechnen Sie den Platz, der zum Speichern der Indexinformationen in den Nicht-Blatt-Ebenen verwendet wird
Führen Sie die folgenden Schritte aus, um den Speicherplatz zu schätzen, der zum Speichern der Zwischen- und Stammebenen des Indexes erforderlich ist. Sie benötigen die Werte aus den Schritten 2 und 3, um diesen Schritt abzuschließen.
Berechnen Sie die Anzahl der Nicht-Blattebenen im Index:
Nicht blattfreie Ebenen = 1 + protokoll Index_Rows_Per_Page (Num_Leaf_Pages / Index_Rows_Per_Page)
Rundet diesen Wert auf die nächste ganze Zahl auf. Dieser Wert enthält nicht die Blattebene des nicht gruppierten Indexes.
Berechnen Sie die Anzahl der nicht blattfreien Seiten im Index:
Num_Index_Pages = ∑ Level (Num_Leaf_Pages/Index_Rows_Per_PageLevel), wobei 1 <= Level <= Levels
Runden Sie jede Summe auf die nächste ganze Zahl auf. Betrachten Sie als einfaches Beispiel einen Index, in dem Num_Leaf_Pages = 1000 und Index_Rows_Per_Page = 25. Die erste Indexebene über der Blattebene speichert 1000 Indexzeilen, also eine Indexzeile pro Blattseite, und 25 Indexzeilen können pro Seite passen. Dies bedeutet, dass 40 Seiten erforderlich sind, um diese 1000 Indexzeilen zu speichern. Die nächste Ebene des Indexes muss 40 Zeilen speichern. Dies bedeutet, dass es 2 Seiten erfordert. Die letzte Ebene des Indexes muss 2 Zeilen speichern. Dies bedeutet, dass es 1 Seite erfordert. Dies führt zu 43 Nicht-Blatt-Indexseiten. Wenn diese Zahlen in den vorherigen Formeln verwendet werden, lautet das Ergebnis wie folgt:
Nicht-leaf_Levels = 1 + log25 (1000 / 25) = 3
Num_Index_Pages = 1000/(253)+ 1000/(252) + 1000/(251) = 1 + 2 + 40 = 43, also die Anzahl der im Beispiel beschriebenen Seiten.
Berechnen der Größe des Indexes (8192 Byte pro Seite):
Index_Space_Used = 8192 x Num_Index_Pages
Schritt 4. Summe der berechneten Werte
Summe der werte, die aus den vorherigen beiden Schritten abgerufen wurden:
Nicht gruppierte Indexgröße (Bytes) = Leaf_Space_Used + Index_Space_used
Bei dieser Berechnung wird Folgendes nicht berücksichtigt:
Partitionierung
Der Speicherplatzaufwand bei der Partitionierung ist minimal, aber komplex zu berechnen. Es ist nicht wichtig, einzuschließen.
Zuordnungsseiten
Es gibt mindestens eine IAM-Seite, um die einem Heap zugeordneten Seiten nachzuverfolgen, aber der Platzaufwand ist minimal und es gibt keinen Algorithmus, um genau zu berechnen, wie viele IAM-Seiten verwendet werden.
Werte für große Objekte (LOB)
Der Algorithmus, um genau zu bestimmen, wie viel Speicherplatz verwendet wird, um die LOB-Datentypen
varchar(max), ,varbinary(max),nvarchar(max),text,ntext,xmlundimageWerte zu speichern ist komplex. Es reicht aus, nur die durchschnittliche Größe der erwarteten LOB-Werte zu addieren, mit Num_Rows zu multiplizieren und dies zur Gesamtgröße des nicht gruppierten Indexes hinzuzufügen.Komprimierung
Sie können die Größe eines komprimierten Indexes nicht vorab berechnen.
Sparsespalten
Informationen zu den Platzanforderungen von Spalten mit geringem Abstand finden Sie unter Verwenden von Spalten mit sparse.for information about the space requirements of sparse columns, see Use Sparse Columns.
Siehe auch
Beschreibung von gruppierten und nicht gruppierten Indizes
Erstellen nicht gruppierter Indizes
Erstellen von gruppierten Indizes
Schätzen der Größe einer Tabelle
Schätzen der Größe eines gruppierten Indexes
Schätzen der Größe eines Heaps
Schätzen der Größe einer Datenbank