Ange fyllningsfaktor för ett index
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-databas i Microsoft Fabric
Det här avsnittet beskriver vad fyllningsfaktor är och hur du anger ett fyllningsfaktorvärde för ett index i SQL Server med hjälp av SQL Server Management Studio eller Transact-SQL.
Fyllningsfaktoralternativet tillhandahålls för finjustering av indexdatalagring och prestanda. När ett index skapas eller återskapas avgör fyllningsfaktorvärdet procentandelen utrymme på varje sida på lövnivå som ska fyllas med data, vilket reserverar resten på varje sida som ledigt utrymme för framtida tillväxt. Om du till exempel anger ett fyllningsfaktorvärde på 80 innebär det att 20 procent av varje lövnivåsida lämnas tom, vilket ger utrymme för indexexpansion när data läggs till i den underliggande tabellen. Det tomma utrymmet är reserverat mellan indexraderna i stället för i slutet av indexet.
Fyllningsfaktorvärdet är en procentandel från 1 till 100 och standardvärdet för hela servern är 0, vilket innebär att bladnivåsidorna fylls till kapacitet.
Not
Fyllningsfaktorvärdena 0 och 100 är desamma i alla avseenden.
i det här avsnittet
Innan du börjar:
Ange en fyllningsfaktor i ett index med hjälp av:
Innan du börjar
Prestandaöverväganden
Siddelningar
Ett korrekt valt fyllningsfaktorvärde kan minska potentiella siddelningar genom att ge tillräckligt med utrymme för indexexpansion när data läggs till i den underliggande tabellen. När en ny rad läggs till på en fullständig indexsida flyttar databasmotorn ungefär hälften av raderna till en ny sida för att göra plats för den nya raden. Den här omorganisationen kallas för siddelning. En sidbrytning ger utrymme för nya poster, men kan ta tid att genomföra och är en resurskrävande åtgärd. Dessutom kan det leda till fragmentering som resulterar i ökade I/O-åtgärder. När frekventa siddelningar inträffar kan man återskapa indexet med hjälp av en ny eller befintlig fyllnadsfaktor för att fördela om data. Mer information finns i Omorganisera och återskapa index.
Även om ett lågt fyllningsfaktorvärde som inte är noll kan minska kravet på att dela upp sidor när indexet växer, kräver indexet mer lagringsutrymme och kan minska läsprestanda. Även för ett program som är inriktat på många infognings- och uppdateringsåtgärder är antalet databasläsningar vanligtvis fler än databasskrivningar med en faktor mellan 5 och 10. Att ange en annan fyllningsfaktor än standardvärdet kan därför minska databasens läsprestanda med en mängd som är omvänt proportionell mot fyllningsfaktorinställningen. Ett fyllningsfaktorvärde på 50 kan till exempel göra att databasens läsprestanda minskar med två gånger. Läsprestandan minskar eftersom indexet innehåller fler sidor, vilket ökar diskens I/O-åtgärder som krävs för att hämta data.
Lägga till data i slutet av tabellen
En annan icke-nollfyllningsfaktor än 0 eller 100 kan vara bra för prestanda om de nya data fördelas jämnt i tabellen. Men om alla data läggs till i slutet av tabellen fylls inte det tomma utrymmet på indexsidorna. Om indexnyckelkolumnen till exempel är en identitetskolumn ökar alltid nyckeln för nya rader och indexraderna läggs logiskt till i slutet av indexet. Om befintliga rader uppdateras med data som förlänger storleken på raderna använder du en fyllningsfaktor på mindre än 100. De extra byteen på varje sida hjälper till att minimera siddelningar som orsakas av extra längd i raderna.
Säkerhet
Behörigheter
Kräver ALTER-behörighet för tabellen eller vyn. Användaren måste vara medlem i sysadmin fast serverroll eller db_ddladmin och db_owner fasta databasroller.
Använda SQL Server Management Studio
Så här anger du en fyllningsfaktor med hjälp av Tabelldesignern
I Object Explorer klickar du på plustecknet för att expandera databasen som innehåller den tabell där du vill ange ett indexs fyllningsfaktor.
Klicka på plustecknet för att expandera mappen Tables.
Högerklicka på tabellen där du vill ange ett indexs fyllningsfaktor och välj Design.
På menyn Table Designer klickar du på Index/Nycklar.
Välj indexet med den fyllningsfaktor som du vill ange.
Expandera Fyllningsspecifikation, välj raden fyllningsfaktor och ange den fyllningsfaktor som du vill använda på raden.
Klicka på Stäng.
På menyn Arkiv väljer du Sparatable_name.
Ange en fyllningsfaktor i ett index med hjälp av Object Explorer
I Object Explorer klickar du på plustecknet för att expandera databasen som innehåller den tabell där du vill ange ett indexs fyllningsfaktor.
Klicka på plustecknet för att expandera mappen Tables.
Klicka på plustecknet för att expandera tabellen där du vill ange ett indexs fyllningsfaktor.
Klicka på plustecknet för att expandera mappen Index.
Högerklicka på indexet med den fyllningsfaktor som du vill ange och välj Egenskaper.
Under Välj en sida, välj Alternativ.
I raden Fyllningsfaktor anger du den fyllningsfaktor som du vill använda.
Klicka på OK.
Använda Transact-SQL
Ange en fyllningsfaktor i ett befintligt index
I Object Exploreransluter du till en instans av databasmotorn.
I fältet Standard klickar du på Ny fråga.
Kopiera och klistra in följande exempel i frågefönstret och klicka på Kör. Exemplet återskapar ett befintligt index och tillämpar den angivna fyllningsfaktorn under återskapandeåtgärden.
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
Ett annat sätt att ange en fyllningsfaktor i ett index
I Object Exploreransluter du till en instans av databasmotorn.
I fältet Standard klickar du på Ny fråga.
Kopiera och klistra in följande exempel i frågefönstret och klicka på Kör.
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
Mer information finns i ALTER INDEX (Transact-SQL).