Sdílet prostřednictvím


Specifikace vyplňovacího faktoru pro index

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL Database v Microsoft Fabric

Toto téma popisuje, co je výplňový faktor a jak určit hodnotu faktoru vyplnění indexu v SQL Serveru pomocí aplikace SQL Server Management Studio nebo Transact-SQL.

Možnost nastavení vyplňovacího faktoru je k dispozici pro jemné doladění úložiště dat indexu a zvýšení výkonu. Při vytvoření nebo opětovném vytvoření indexu určuje hodnota faktoru výplně procento mezery na každé stránce na úrovni listu, která se má vyplnit daty, a zbytek na každé stránce si zarezervuje jako volné místo pro budoucí růst. Když například zadáte hodnotu faktoru výplně 80, znamená to, že 20 procent každé stránky na úrovni listu zůstane prázdné, čímž poskytne prostor pro rozšíření indexu při přidávání dat do základní tabulky. Prázdné místo je vyhrazeno mezi řádky indexu místo na konci indexu.

Hodnota výplňového faktoru je procento od 1 do 100 a výchozí hodnota na úrovni serveru je 0, což znamená, že stránky na úrovni listu jsou vyplněné do kapacity.

Poznámka

Hodnoty plnění 0 a 100 jsou ve všech ohledech stejné.

V tomto tématu

Než začnete

Důležité informace o výkonu

Rozdělení stránek

Správně zvolená hodnota výplňového faktoru může snížit potenciální rozdělení stránek tím, že poskytuje dostatek místa pro rozšíření indexu při přidání dat do podkladové tabulky. Když se nový řádek přidá na celou indexovou stránku, databázový stroj přesune přibližně polovinu řádků na novou stránku, aby se uvolnil prostor pro nový řádek. Tato změna uspořádání se označuje jako rozdělení stránky. Rozdělení stránky dává prostor pro nové záznamy, ale může nějakou dobu trvat, než se provede a je operace náročná na prostředky. Může také způsobit fragmentaci, která způsobuje zvýšené vstupně-výstupní operace. Pokud dojde k častým rozdělením stránek, lze index znovu vytvořit pomocí nové nebo existující hodnoty fill-factor k redistribuci dat. Další informace naleznete v tématu změna uspořádání a opětovného sestavení indexů.

I když nízká, nenulová hodnota výplňového faktoru může snížit požadavek na rozdělení stránek při růstu indexu, index bude vyžadovat větší prostor úložiště a může snížit výkon čtení. I u aplikací orientovaných na mnoho operací vložení a aktualizace počet čtení databáze obvykle vyčísluje zápisy databáze faktorem 5 až 10. Proto určení jiného faktoru zaplnění než výchozího může snížit výkon čtení databáze mírou, která je nepřímo úměrná nastavení faktoru zaplnění. Například hodnota výplňového faktoru 50 může způsobit, že výkon čtení databáze se dvakrát sníží. Výkon čtení se snižuje, protože index obsahuje více stránek, a proto zvyšuje vstupně-výstupní operace disku potřebné k načtení dat.

Přidání dat na konec tabulky

Nenulový faktor výplně jiný než 0 nebo 100 může být vhodný pro výkon, pokud se nová data rovnoměrně distribuují v celé tabulce. Pokud se ale všechna data přidají na konec tabulky, prázdné místo na stránkách indexu se nezaplní. Pokud je například sloupec s klíčem indexu sloupec IDENTITY, klíč pro nové řádky se neustále zvětšuje a řádky indexu jsou logicky přidány na konec indexu. Pokud budou existující řádky aktualizovány daty, která prodlužují velikost řádků, použijte faktor výplně menší než 100. Nadbytečné bajty na každé stránce vám pomůžou minimalizovat rozdělení stránek způsobené extra délkou řádků.

Bezpečnost

Dovolení

Vyžaduje oprávnění ALTER v tabulce nebo zobrazení. Uživatel musí být členem role správce systému pevné role serveru nebo db_ddladmin a db_owner pevné databázové role.

Použití aplikace SQL Server Management Studio

Určení faktoru výplně pomocí Návrháře tabulky

  1. V Průzkumníku objektů kliknutím na znaménko plus rozbalte databázi obsahující tabulku, na které chcete zadat faktor vyplnění indexu.

  2. Kliknutím na znaménko plus rozbalte složku Tabulky.

  3. Pravým tlačítkem myši klikněte na tabulku, na které chcete zadat faktor výplně indexu, a vyberte Návrh.

  4. V nabídce Návrhář tabulky klikněte na Indexy/Klíče.

  5. Vyberte index s faktorem výplně, který chcete zadat.

  6. Rozbalte specifikaci výplně , vyberte řádek faktoru výplně a zadejte požadovaný faktor výplně v řádku.

  7. Klikněte na Zavřít.

  8. V nabídce Soubor vyberte možnost Uložittable_name.

Určení faktoru vyplnění v indexu pomocí Průzkumníka objektů

  1. V Průzkumníku objektů kliknutím na znaménko plus rozbalte databázi obsahující tabulku, na které chcete zadat faktor vyplnění indexu.

  2. Kliknutím na znaménko plus rozbalte složku Tabulky.

  3. Kliknutím na znaménko plus rozbalte tabulku, na které chcete zadat faktor výplně indexu.

  4. Kliknutím na znaménko plus rozbalte složku Indexy.

  5. Pravým tlačítkem myši klikněte na index s faktorem výplně, který chcete zadat, a vyberte Vlastnosti.

  6. V části Vyberte stránku, vyberte Možnosti.

  7. V řádku Faktor výplně zadejte faktor výplně, který chcete.

  8. Klepněte na tlačítko OK.

Použití Transact-SQL

Určení faktoru vyplnění v existujícím indexu

  1. V Průzkumníku objektůse připojte k instanci databázového serveru.

  2. Na panelu Standard klikněte na Nový dotaz.

  3. Zkopírujte a vložte následující příklad do okna dotazu a klikněte na Spustit. Příklad znovu sestaví existující index a použije zadaný faktor výplně během operace opětovného sestavení.

    USE AdventureWorks2022;  
    GO  
    -- Rebuilds the IX_Employee_OrganizationLevel_OrganizationNode index   
    -- with a fill factor of 80 on the HumanResources.Employee table.  
    
    ALTER INDEX IX_Employee_OrganizationLevel_OrganizationNode ON HumanResources.Employee  
    REBUILD WITH (FILLFACTOR = 80);   
    GO  
    

Jiný způsob, jak zadat vyplňovací faktor v rámci indexu

  1. V Průzkumník objektůse připojte k instanci databázového enginu.

  2. Na panelu Standard klikněte na Nový dotaz.

  3. Zkopírujte a vložte následující příklad do okna dotazu a klikněte na Spustit.

    USE AdventureWorks2022;  
    GO  
    -- Drops and re-creates the IX_Employee_OrganizationLevel_OrganizationNode index
    -- on the HumanResources.Employee table with a fill factor of 80.   
    
    CREATE INDEX IX_Employee_OrganizationLevel_OrganizationNode ON HumanResources.Employee  
       (OrganizationLevel, OrganizationNode)   
    WITH (DROP_EXISTING = ON, FILLFACTOR = 80);   
    GO  
    

Pro více informací, viz ALTER INDEX (Transact-SQL).