Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-databas i Microsoft Fabric
Du kan använda följande steg för att uppskatta mängden utrymme som krävs för att lagra data i ett klustrade index:
Beräkna det utrymme som används för att lagra data på lövnivån för det klustrade indexet.
Beräkna det utrymme som används för att lagra indexinformation för det klustrade indexet.
Summera de beräknade värdena.
Steg 1. Beräkna det utrymme som används för att lagra data på lövnivå
Ange antalet rader som ska finnas i tabellen:
Num_Rows = antal rader i tabellen
Ange antalet kolumner med fast längd och variabel längd och beräkna det utrymme som krävs för lagringen:
Beräkna det utrymme som var och en av dessa grupper av kolumner upptar i dataraden. Storleken på en kolumn beror på datatypen och längdspecifikationen.
Num_Cols = totalt antal kolumner (fast längd och variabel längd)
Fixed_Data_Size = total bytestorlek för alla kolumner med fast längd
Num_Variable_Cols = antal kolumner med variabel längd
Max_Var_Size = maximal bytestorlek för alla kolumner med variabel längd
Om det klustrade indexet inte är unikt bör du ta hänsyn till kolumnen uniqueifier:
Uniqueifier är en nullbar kolumn med variabel längd. Det kommer att vara icke-noll och 4 bytes i storlek i rader som har icke-unika nyckelvärden. Det här värdet är en del av indexnyckeln och krävs för att se till att varje rad har ett unikt nyckelvärde.
Num_Cols = Num_Cols + 1
Num_Variable_Cols = Num_Variable_Cols + 1
Max_Var_Size = Max_Var_Size + 4
Dessa ändringar förutsätter att alla värden inte är unika.
En del av raden, som kallas null-bitmappen, är reserverad för att hantera kolumnens nullabilitet. Beräkna dess storlek:
Null_Bitmap = 2 + ((Num_Cols + 7) / 8)
Endast heltalsdelen i föregående uttryck ska användas. ta bort resten.
Beräkna datastorleken för variabel längd:
Om det finns kolumner med variabel längd i tabellen bestämmer du hur mycket utrymme som används för att lagra kolumnerna i raden:
Variabel_Data_Storlek = 2 + (Antal_Variabla_Kolumner x 2) + Max_Var_Storlek
Byte som läggs till i Max_Var_Size används för att spåra varje variabelkolumn. Den här formeln förutsätter att alla kolumner med variabel längd är 100 procent fulla. Om du räknar med att en mindre procentandel av kolumnutrymmet med variabel längd kommer att användas kan du justera Max_Var_Size värdet med den procentandelen för att ge en mer exakt uppskattning av den totala tabellstorleken.
Not
Du kan kombinera varchar, nvarchar, varbinaryeller sql_variant kolumner som gör att den totala definierade tabellbredden överskrider 8 060 byte. Längden på var och en av dessa kolumner måste fortfarande ligga inom gränsen på 8 000 byte för en varchar, varbinary, eller sql_variant kolumn och 4 000 byte för nvarchar kolumner. Deras sammanlagda bredd kan dock överskrida gränsen på 8 060 byte i en tabell.
Om det inte finns några kolumner med variabel längd anger du Variable_Data_Size till 0.
Beräkna den totala radstorleken:
Row_Size = Fixed_Data_Size + Variable_Data_Size + Null_Bitmap + 4
Värdet 4 är radrubrikens overhead för en datarad.
Beräkna antalet rader per sida (8 096 kostnadsfria byte per sida):
Rader_per_sida = 8096 / (Rad_storlek + 2)
Eftersom rader inte sträcker sig över sidor bör antalet rader per sida avrundas nedåt till närmaste hela rad. Värdet 2 i formeln är för radens post i sidans fackmatris.
Beräkna antalet reserverade kostnadsfria rader per sida baserat på fyllningsfaktor angett:
Free_Rows_Per_Page = 8096 x ((100 - Fill_Factor) / 100) / (Row_Size + 2)
Fyllningsfaktorn som används i beräkningen är ett heltalsvärde i stället för en procentandel. Eftersom rader inte sträcker sig över sidor bör antalet rader per sida avrundas nedåt till närmaste hela rad. När fyllningsfaktorn växer lagras mer data på varje sida och det blir färre sidor. Värdet 2 i formeln är för radens post i sidans fackmatris.
Beräkna antalet sidor som krävs för att lagra alla rader:
Antal_Blad_Sidor = Antal_Rader / (Rader_Per_Sida - Fria_Rader_Per_Sida)
Antalet beräknade sidor bör avrundas upp till närmaste hela sida.
Beräkna mängden utrymme som krävs för att lagra data på lövnivån (totalt 8 192 byte per sida):
Använd_bladyta = 8192 x Antal_bladsidor
Steg 2. Beräkna det utrymme som används för att lagra indexinformation
Du kan använda följande steg för att uppskatta mängden utrymme som krävs för att lagra indexets övre nivåer:
Ange antalet kolumner med fast längd och variabel längd i indexnyckeln och beräkna det utrymme som krävs för lagringen:
Nyckelkolumnerna i ett index kan innehålla kolumner med fast längd och variabel längd. Om du vill beräkna radstorleken för indexraden på inre nivå beräknar du det utrymme som var och en av dessa grupper av kolumner upptar inom indexraden. Storleken på en kolumn beror på datatypen och längdspecifikationen.
Num_Key_Cols = totalt antal nyckelkolumner (fast längd och variabel längd)
Fixed_Key_Size = total bytestorlek för alla nyckelkolumner med fast längd
Num_Variable_Key_Cols = antal nyckelkolumner med variabel längd
Max_Var_Key_Size = maximal bytestorlek för alla nyckelkolumner med variabel längd
Ta hänsyn till alla unika identifierare som behövs om indexet inte är unikt:
Uniqueifier är en nullbar kolumn med variabel längd. Det blir icke-inaktivt och 4 byte i storlek på rader som har icke-unika indexnyckelvärden. Det här värdet är en del av indexnyckeln och krävs för att se till att varje rad har ett unikt nyckelvärde.
Num_Key_Cols = Num_Key_Cols + 1
Num_Variable_Key_Cols = Num_Variable_Key_Cols + 1
Max_Var_Key_Size = Max_Var_Key_Size + 4
Dessa ändringar förutsätter att alla värden inte är unika.
Beräkna storleken på null-bitmap:
Om det finns null-kolumner i indexnyckeln är en del av indexraden reserverad för null-bitmappen. Beräkna dess storlek:
Index_Null_Bitmap = 2 + ((antal kolumner i indexraden + 7) / 8)
Endast heltalsdelen av föregående uttryck ska användas. Ta bort resten.
Om det inte finns några null-nyckelkolumner anger du Index_Null_Bitmap till 0.
Beräkna datastorleken för variabel längd:
Om det finns kolumner med variabel längd i indexet avgör du hur mycket utrymme som används för att lagra kolumnerna i indexraden:
Variable_Key_Size = 2 + (Num_Variable_Key_Cols x 2) + Max_Var_Key_Size
Byte som läggs till i Max_Var_Key_Size används för att spåra varje kolumn med variabel längd. Den här formeln förutsätter att alla kolumner med variabel längd är 100 procent fulla. Om du räknar med att en mindre procentandel av kolumnutrymmet med variabel längd kommer att användas kan du justera Max_Var_Key_Size värdet med den procentandelen för att ge en mer exakt uppskattning av den totala tabellstorleken.
Om det inte finns några kolumner med variabel längd anger du Variable_Key_Size till 0.
Beräkna indexradens storlek:
Index_Row_Size = Fixed_Key_Size + Variable_Key_Size + Index_Null_Bitmap + 1 (för överhead för radrubriken av en indexrad) + 6 (för den underordnade sid-ID-pekaren)
Beräkna antalet indexrader per sida (8 096 kostnadsfria byte per sida):
Index_Rows_Per_Page = 8096 / (Index_Row_Size + 2)
Eftersom indexrader inte sträcker sig över sidor bör antalet indexrader per sida avrundas nedåt till närmaste hela rad. 2 i formeln är för radens post i sidans fackmatris.
Beräkna antalet nivåer i indexet:
Icke-bladnivåer = 1 + logg (Index_Rader_Per_Sida) (Antal_Blad_Sidor / Index_Rader_Per_Sida)
Avrunda det här värdet upp till närmaste heltal. Det här värdet inkluderar inte bladnivån i det klustrade indexet.
Beräkna antalet icke-lövsidor i indexet:
Num_Index_Pages = ∑Level (Num_Leaf_Pages / (Index_Rows_Per_Page^Level))
där 1 <= Level <= Icke-blad_levels
Avrunda varje summand upp till närmaste heltal. Som ett enkelt exempel bör du överväga ett index där Num_Leaf_Pages = 1 000 och Index_Rows_Per_Page = 25. Den första indexnivån ovanför lövnivån lagrar 1 000 indexrader, vilket är en indexrad per lövsida och 25 indexrader får plats per sida. Det innebär att 40 sidor krävs för att lagra dessa 1 000 indexrader. Nästa nivå i indexet måste lagra 40 rader. Det innebär att det krävs 2 sidor. Den sista nivån i indexet måste lagra 2 rader. Det innebär att det krävs 1 sida. Detta ger 43 icke-bladindexsidor. När dessa tal används i föregående formler är resultatet följande:
Icke-bladnivåer = 1 + log(25) (1000 / 25) = 3
Num_Index_Pages = 1000/(25^3)+ 1000/(25^2) + 1000/(25^1) = 1 + 2 + 40 = 43, vilket är antalet sidor som beskrivs i exemplet.
Beräkna storleken på indexet (totalt 8 192 byte per sida):
Använd_Indexutrymme = 8192 x Antal_Indexsidor
Steg 3. Summera de beräknade värdena
Summera de värden som hämtades från de föregående två stegen:
Grupperad indexstorlek (byte) = Använt_Lövyta + Använt_Indexutrymme
Den här beräkningen tar inte hänsyn till följande:
Partitionering
Utrymmeskostnaderna från partitionering är minimala, men komplexa att beräkna. Det är inte viktigt att ta med.
Allokeringssidor
Det finns minst en IAM-sida som används för att spåra de sidor som allokerats till en heap, men utrymmeskostnaderna är minimala och det finns ingen algoritm för att deterministiskt beräkna exakt hur många IAM-sidor som ska användas.
Värden för stora objekt (LOB)
Algoritmen för att avgöra exakt hur mycket utrymme som ska användas för att lagra LOB-datatyperna varchar(max), varbinary(max), nvarchar(max), text, ntext, xmloch bild värden är komplexa. Det räcker att bara lägga till den genomsnittliga storleken på de LOB-värden som förväntas, multiplicera med Num_Rowsoch lägga till den i den totala klustrade indexstorleken.
Komprimering
Du kan inte beräkna storleken på ett komprimerat index i förväg.
Glesa kolumner
Information om utrymmeskraven för glesa kolumner finns i Använda glesa kolumner.