Odhad velikosti neclusterovaného indexu
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL database v Microsoft Fabric
Při odhadu velikosti místa potřebného k uložení neclusterovaného indexu postupujte takto:
Výpočet proměnných pro použití v krocích 2 a 3
Vypočítejte místo použité k uložení informací indexu na úrovni listu neclusterovaného indexu.
Vypočítejte místo použité k uložení informací indexu v neclusterovaných úrovních indexu, které nejsou typu list.
Součet počítaných hodnot
Krok 1. Výpočet proměnných pro použití v krocích 2 a 3
Následující kroky můžete použít k výpočtu proměnných, které se používají k odhadu množství místa potřebného k uložení horních úrovní indexu.
Zadejte počet řádků, které budou v tabulce přítomné:
Num_Rows = počet řádků v tabulce
Zadejte počet sloupců s pevnou délkou a proměnlivou délkou v klíči indexu a vypočítejte požadovaný prostor pro úložiště:
Klíčové sloupce indexu mohou obsahovat sloupce s pevnou délkou a proměnnou délkou. Pokud chcete odhadnout velikost řádku indexu na úrovni interiéru, vypočítejte mezeru, kterou každá z těchto skupin sloupců zabírá v řádku indexu. Velikost sloupce závisí na datovém typu a specifikaci délky.
Num_Key_Cols = celkový počet klíčových sloupců (pevná délka a proměnná délka)
Fixed_Key_Size = celková velikost bajtů všech sloupců klíčů s pevnou délkou
Num_Variable_Key_Cols = počet sloupců klíče s proměnnou délkou
Max_Var_Key_Size = maximální velikost bajtu všech sloupců klíčů s proměnnou délkou
Vezměte v úvahu lokátor řádku dat, který je nutný, pokud index není jedinečný.
Pokud je neclusterovaný index nevýznamný, lokátor datového řádku se zkombinuje s neclusterovaným indexovým klíčem a vytvoří jedinečnou hodnotu klíče pro každý řádek.
Pokud je neklastrovaný index vytvořen nad haldou, lokátor řádku dat je identifikátor RID haldy. Jedná se o velikost 8 bajtů.
Num_Key_Cols = Num_Key_Cols + 1
Num_Variable_Key_Cols = Num_Variable_Key_Cols + 1
Max_Var_Key_Size = Max_Var_Key_Size + 8
Pokud je neclusterovaný index nad clusterovaným indexem, je lokátorem datového řádku klíč clusteringu. Sloupce, které musí být sloučeny s neclusterovaným indexovým klíčem, jsou sloupce v klíči clusteringu, které ještě nejsou přítomné v sadě neclusterovaných sloupců klíče indexu.
Num_Key_Cols = Num_Key_Cols + počet sloupců s klíči clusteringu, které nejsou v sadě neclusterovaných sloupců s klíči indexu (+ 1, pokud clusterovaný index neníunique)
Fixed_Key_Size = Fixed_Key_Size + celková velikost bajtů sloupců s klíči clusteringu s pevnou délkou, které nejsou v sadě neclusterovaných sloupců klíčů indexu
Num_Variable_Key_Cols = Num_Variable_Key_Cols + počet sloupců klíče clusteringu s proměnnou délkou, které nejsou v sadě neclusterovaných sloupců indexového klíče (+ 1, pokud clusterovaný index neníunique)
Max_Var_Key_Size = Max_Var_Key_Size + maximální velikost bajtu sloupců s klíči s proměnnou délkou, které nejsou v sadě neclusterovaných sloupců s klíči indexu (+ 4, pokud clusterovaný index neníunique)
Část řádku, známá jako bitmapa hodnot null, může být vyhrazena pro správu nulovatelnosti sloupců. Vypočítat jeho velikost:
Pokud jsou v klíči indexu sloupce s hodnotou null, včetně všech potřebných sloupců clusterovacího klíče, jak je popsáno v kroku 1.3, je část řádku indexu vyhrazena pro bitmapu null.
Index_Null_Bitmap = 2 + ((počet sloupců v řádku indexu + 7) / 8)
Měla by se použít pouze celočíselná část předchozího výrazu. Zahoďte zbývající část.
Pokud neexistují žádné klíčové sloupce s možnou hodnotou null, nastavte Index_Null_Bitmap na hodnotu 0.
Výpočet velikosti dat o délce proměnné:
Pokud jsou v klíči indexu sloupce s proměnnou délkou, včetně všech potřebných sloupců clusterovaných klíčů indexu, určete, kolik místa se použije k uložení sloupců v řádku indexu:
Variable_Key_Size = 2 + (Num_Variable_Key_Cols x 2) + Max_Var_Key_Size
Bajty přidané do Max_Var_Key_Size slouží ke sledování jednotlivých sloupců proměnných. Tento vzorec předpokládá, že všechny sloupce s proměnlivou délkou jsou plné 100 procent. Pokud předpokládáte, že se použije menší procento prostoru úložiště s proměnlivou délkou, můžete upravit Max_Var_Key_Size hodnotu podle tohoto procenta, abyste mohli získat přesnější odhad celkové velikosti tabulky.
Pokud neexistují žádné sloupce s proměnlivou délkou, nastavte Variable_Key_Size na 0.
Výpočet velikosti řádku indexu:
Index_Row_Size = Fixed_Key_Size + Variable_Key_Size + Index_Null_Bitmap + 1 (pro režii záhlaví řádku indexu) + 6 (pro ukazatel ID podřízené stránky)
Vypočítat počet řádků indexu na stránku (8096 volných bajtů na stránku):
Index_Rows_Per_Page = 8096 / (Index_Row_Size + 2)
Vzhledem k tomu, že řádky indexu nepřesahují stránky, měl by se počet řádků indexu na stránku zaokrouhlit dolů na nejbližší celý řádek. Hodnota 2 ve vzorci je určena pro záznam řádku v poli slotů stránky.
Krok 2. Výpočet místa použitého k ukládání informací indexu na úrovni listu
Pomocí následujících kroků můžete odhadnout množství místa potřebného k uložení úrovně listu indexu. K dokončení tohoto kroku budete potřebovat hodnoty zachované z kroku 1.
Zadejte počet sloupců s pevnou délkou a proměnlivou délkou na úrovni listu a vypočítejte prostor potřebný pro jejich úložiště:
Poznámka
Neclusterovaný index můžete rozšířit zahrnutím sloupců bez klíče kromě sloupců klíče indexu. Tyto další sloupce jsou uloženy pouze na úrovni listu neclusterovaného indexu. Další informace najdete v tématu Vytvoření indexů se zahrnutými sloupci.
Poznámka
Můžete kombinovat varchar, nvarchar, varbinárnínebo sql_variant sloupce, které způsobují, že celková definovaná šířka tabulky přesahuje 8 060 bajtů. Délka každého z těchto sloupců musí stále spadat do limitu 8 000 bajtů pro sloupec varchar, varbinary, nebo sql_variant a 4 000 bajtů pro sloupec nvarchar. Jejich kombinované šířky však mohou překročit limit 8 060 bajtů v tabulce. To platí také pro neclusterované řádky listu indexu, které obsahují sloupce.
Pokud neclusterovaný index neobsahuje žádné zahrnuté sloupce, použijte hodnoty z kroku 1, včetně jakýchkoli úprav určených v kroku 1.3:
Num_Leaf_Cols = Num_Key_Cols
Pevná_Velikost_Listu = Pevná_Velikost_Klíče
Počet_Proměnlivých_Listových_Sloupců = Počet_Proměnlivých_Klíčových_Sloupců
Max_Var_Leaf_Size = Max_Var_Key_Size
Pokud neclusterovaný index obsahuje zahrnuté sloupce, přidejte příslušné hodnoty k hodnotám z kroku 1, včetně všech úprav v kroku 1.3. Velikost sloupce závisí na datovém typu a specifikaci délky. Další informace viz téma Datové typy (Transact-SQL).
Num_Leaf_Cols = Num_Key_Cols + počet zahrnutých sloupců
Fixed_Leaf_Size = Fixed_Key_Size + celková velikost bajtů zahrnutých sloupců s pevnou délkou
Num_Variable_Leaf_Cols = Num_Variable_Key_Cols + počet zahrnutých sloupců s proměnlivou délkou
Max_Var_Leaf_Size = Max_Var_Key_Size + maximální velikost bajtu zahrnutých sloupců s proměnnou délkou
Zohlednit lokátor datového řádku:
Pokud je neklastrovaný index neunikátní, náklady na lokátor datových řádků již byly zohledněny v kroku 1.3 a nejsou vyžadovány žádné další úpravy. Přejděte k dalšímu kroku.
Pokud je neklastrovaný index jedinečný, musí být lokátor řádku dat započítán do všech řádků na úrovni listu.
Pokud je neklastrovaný index vytvořen nad haldou, lokátor datového řádku je identifikátor RID haldy (velikost 8 bajtů).
Num_Leaf_Cols = Num_Leaf_Cols + 1
Num_Variable_Leaf_Cols = Num_Variable_Leaf_Cols + 1
Max_Var_Leaf_Size = Max_Var_Leaf_Size + 8
Pokud je neclusterovaný index nad clusterovaným indexem, je lokátorem datového řádku klíč clusteringu. Sloupce, které musí být sloučeny s neclusterovaným indexovým klíčem, jsou sloupce v klíči clusteringu, které ještě nejsou přítomné v sadě neclusterovaných sloupců klíče indexu.
Num_Leaf_Cols = Num_Leaf_Cols + počet sloupců klíčů clusteringu, které nejsou v sadě neclusterovaných sloupců s klíči indexu (+ 1, pokud clusterovaný index neníunique)
Fixed_Leaf_Size = Fixed_Leaf_Size + počet sloupců klíčů s pevnou délkou, které nejsou zahrnuty v sadě klíčových sloupců neklastrovaného indexu
Num_Variable_Leaf_Cols = Num_Variable_Leaf_Cols + počet sloupců klíče clusteringu s proměnnou délkou, které nejsou v sadě neclusterovaných sloupců s klíči indexu (+ 1, pokud clusterovaný index neníunique)
Max_Var_Leaf_Size = Max_Var_Leaf_Size + velikost v bajtech clusteringových klíčových sloupců s proměnnou délkou, ne v sadě neclusterovaných sloupců s klíči indexu (+ 4, pokud clusterovaný index neníunique)
Výpočet velikosti rastrového obrázku s hodnotou null:
Leaf_Null_Bitmap = 2 + ((Num_Leaf_Cols + 7) / 8)
Měla by se použít pouze celočíselná část předchozího výrazu. Zahoďte zbývající část.
Výpočet velikosti dat o délce proměnné:
Pokud existují sloupce s proměnnou délkou (klíčové sloupce nebo zahrnuté), včetně všech potřebných sloupců klíčů clusteringu, jak je popsáno výše v kroku 2.2, určete, kolik místa se použije k uložení sloupců v řádku indexu:
Proměnná_Velikost_Listu = 2 + (Počet_Proměnných_Sloupců_Listu x 2) + Max_Proměnná_Velikost_Listu
Bajty přidané do Max_Var_Key_Size slouží ke sledování jednotlivých sloupců proměnných. Tento vzorec předpokládá, že všechny sloupce s proměnlivou délkou jsou plné 100 procent. Pokud předpokládáte, že se použije menší procento prostoru úložiště sloupců s proměnlivou délkou, můžete upravit Max_Var_Leaf_Size hodnotu podle tohoto procenta, abyste mohli získat přesnější odhad celkové velikosti tabulky.
Pokud nejsou žádné sloupce s proměnnou délkou (klíčové sloupce nebo zahrnuté), nastavte Variable_Leaf_Size na hodnotu 0.
Výpočet velikosti řádku indexu:
Leaf_Row_Size = Fixed_Leaf_Size + Variable_Leaf_Size + Leaf_Null_Bitmap + 1 (pro režii záhlaví řádku indexu)
Vypočítat počet řádků indexu na stránku (8096 volných bajtů na stránku):
Počet_řádků_na_list = 8096 / (Velikost_řádku_na_listu + 2)
Vzhledem k tomu, že řádky indexu nepřesahují stránky, měl by se počet řádků indexu na stránku zaokrouhlit dolů na nejbližší celý řádek. Hodnota 2 ve vzorci je určená pro položku řádku v poli slotů stránky.
Vypočítejte počet volných rezervovaných řádků na stránku na základě zadaného faktoru vyplnění .
Free_Rows_Per_Page = 8096 x ((100 - Fill_Factor) / 100) / (Leaf_Row_Size + 2)
Faktor výplně použitý ve výpočtu je celočíselná hodnota místo procenta. Vzhledem k tomu, že řádky nepřesahují stránky, měl by se počet řádků na stránku zaokrouhlit dolů na nejbližší celý řádek. S rostoucím faktorem výplně se na každé stránce uloží více dat a bude jich méně. Hodnota 2 ve vzorci je určená pro položku řádku v poli slotů stránky.
Výpočet počtu stránek potřebných k uložení všech řádků:
Num_Leaf_Pages = Num_Rows / (Leaf_Rows_Per_Page - Free_Rows_Per_Page)
Odhadovaný počet stránek by se měl zaokrouhlit nahoru na nejbližší celou stránku.
Vypočítat velikost indexu (8192 celkových bajtů na stránku):
Prostor_Použitý_Větvemi = 8192 x Počet_Listových_Stránek
Krok 3. Výpočet místa použitého k ukládání informací indexu v úrovních mimo list
Při odhadu velikosti místa potřebného k uložení mezilehlých a kořenových úrovní indexu postupujte podle těchto kroků. K dokončení tohoto kroku budete potřebovat hodnoty zachované z kroků 2 a 3.
Vypočítejte počet ne-listových úrovní v indexu.
Úrovně bez listu = 1 + log( Index_Rows_Per_Page) (Num_Leaf_Pages / Index_Rows_Per_Page)
Zaokrouhlí tuto hodnotu nahoru na nejbližší celé číslo. Tato hodnota nezahrnuje úroveň listu neclusterovaného indexu.
Vypočítejte počet nelistových stránků v indexu:
Num_Index_Pages = ∑Level (Num_Leaf_Pages/Index_Rows_Per_Page^Level)kde 1 <= Úroveň <= úrovně
Zaokrouhlí každý součet nahoru na nejbližší celé číslo. Jako jednoduchý příklad zvažte index, kde Num_Leaf_Pages = 1000 a Index_Rows_Per_Page = 25. První úroveň indexu nad úrovní listu ukládá 1 000 řádků indexu, což je jeden řádek indexu na stránku listu a 25 řádků indexu se může vejít na stránku. To znamená, že k uložení těchto 1000 řádků indexu je potřeba 40 stránek. Další úroveň indexu musí uložit 40 řádků. To znamená, že vyžaduje 2 stránky. Poslední úroveň indexu musí ukládat 2 řádky. To znamená, že vyžaduje 1 stránku. Výsledkem je 43 ne-listových indexových stránek. Pokud se tato čísla použijí v předchozích vzorcích, výsledek je následující:
non-leaf_Levels = 1 + log(25) (1000 / 25) = 3
Num_Index_Pages = 1000/(25^3)+ 1000/(25^2) + 1000/(25^1) = 1 + 2 + 40 = 43, což je počet stránek popsaných v příkladu.
Vypočítat velikost indexu (8192 celkových bajtů na stránku):
Dynamika_prostoru_indexu = 8192 x Počet_stranek_indexu
Krok 4. Součet počítaných hodnot
Součet hodnot získaných z předchozích dvou kroků:
Neclusterovaná velikost indexu (bajty) = Leaf_Space_Used + Index_Space_used
Tento výpočet nebere v úvahu následující:
Rozkládání
Prostorové nároky na dělení jsou minimální, ale složité na výpočet. Není nutné to zahrnovat.
Stránky alokace
Ke sledování stránek přidělených haldě se používá nejméně jedna stránka IAM, avšak režie prostoru je minimální a neexistuje algoritmus k deterministickému výpočtu přesného počtu použitých stránek IAM.
Velké hodnoty objektu (LOB)
Algoritmus, který přesně určí, kolik místa se použije k ukládání datových typů LOB varchar(max), varbinary(max), nvarchar(max), text, ntext, xmla image, je složitý. Stačí přidat průměrnou velikost očekávaných hodnot LOB, vynásobit Num_Rowsa přidat ji k celkové neclusterované velikosti indexu.
Komprese
Velikost komprimovaného indexu nelze předem vypočítat.
Řídké sloupce
Informace o požadavcích na prostor řídkých sloupců najdete v tématu Použití řídkých sloupců.
Viz také
clusterované a neclusterované indexy popsané
vytváření neclusterovaných indexů
vytváření clusterovaných indexů
Odhad velikosti tabulky
Odhad velikosti clusterovaného indexu
Odhad velikosti haldy
Odhad velikosti databáze