Delen via


Vulfactor opgeven voor een index

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-database in Microsoft Fabric

In dit onderwerp wordt beschreven wat vulfactor is en hoe u een opvulfactorwaarde opgeeft in een index in SQL Server met behulp van SQL Server Management Studio of Transact-SQL.

De fill-factor-optie is beschikbaar voor het verfijnen van de opslag en prestaties van indexgegevens. Wanneer een index wordt gemaakt of opnieuw wordt opgebouwd, bepaalt de waarde van de fill-factor het percentage ruimte op elke pagina op bladniveau die moet worden gevuld met gegevens, waarbij de rest op elke pagina wordt opgeslagen als vrije ruimte voor toekomstige groei. Als u bijvoorbeeld een opvulfactorwaarde van 80 opgeeft, betekent dit dat 20 procent van elke pagina op bladniveau leeg blijft, zodat er ruimte is voor indexuitbreiding wanneer gegevens worden toegevoegd aan de onderliggende tabel. De lege ruimte is gereserveerd tussen de indexrijen in plaats van aan het einde van de index.

De waarde van de fill-factor is een percentage van 1 tot 100 en de standaardwaarde voor de hele server is 0, wat betekent dat de pagina's op bladniveau worden opgevuld naar capaciteit.

Notitie

Vulfactorwaarden 0 en 100 zijn in alle opzichten hetzelfde.

In Dit Onderwerp

Voordat u begint

Prestatieoverwegingen

Paginasplitsingen

Een correct gekozen fill-factor-waarde kan potentiƫle paginasplitsingen verminderen door voldoende ruimte te bieden voor indexuitbreiding wanneer gegevens worden toegevoegd aan de onderliggende tabel. Wanneer een nieuwe rij wordt toegevoegd aan een volledige indexpagina, verplaatst de database-engine ongeveer de helft van de rijen naar een nieuwe pagina om ruimte te maken voor de nieuwe rij. Deze reorganisatie wordt een paginasplitsing genoemd. Een paginasplitsing maakt ruimte voor nieuwe records, maar kan enige tijd in beslag nemen en is een resource-intensieve bewerking. Het kan ook fragmentatie veroorzaken die verhoogde I/O-bewerkingen veroorzaakt. Wanneer frequente paginasplitsingen optreden, kan de index opnieuw worden opgebouwd met behulp van een nieuwe of bestaande fill-factor-waarde om de gegevens opnieuw te distribueren. Zie Indexen opnieuw ordenen en herbouwenvoor meer informatie.

Hoewel een lage, niet-nulvulfactorwaarde de vereiste voor het splitsen van pagina's kan verminderen naarmate de index groeit, vereist de index meer opslagruimte en kan de leesprestaties afnemen. Zelfs voor een applicatie die is gericht op veel invoeg- en updatebewerkingen, overtreft het aantal databasereads doorgaans het aantal databasewrites met een factor van 5 tot 10. Het opgeven van een andere opvulfactor dan de standaardwaarde kan de leesprestaties van de database verminderen met een bedrag dat omgekeerd evenredig is met de instelling van de fill-factor. Een opvulfactorwaarde van 50 kan bijvoorbeeld ertoe leiden dat de leesprestaties van de database twee keer afnemen. Leesprestaties worden verminderd omdat de index meer pagina's bevat, waardoor de schijf-I/O-bewerkingen die nodig zijn om de gegevens op te halen, worden verhoogd.

Gegevens toevoegen aan het einde van de tabel

Een andere niet-nulvulfactor dan 0 of 100 kan goed zijn voor prestaties als de nieuwe gegevens gelijkmatig in de hele tabel worden verdeeld. Als alle gegevens echter worden toegevoegd aan het einde van de tabel, wordt de lege ruimte op de indexpagina's niet ingevuld. Als de indexsleutelkolom bijvoorbeeld een identiteitskolom is, neemt de sleutel voor nieuwe rijen altijd toe en worden de indexrijen logisch toegevoegd aan het einde van de index. Als bestaande rijen worden bijgewerkt met gegevens die de grootte van de rijen vergroten, gebruikt u een opvulfactor van minder dan 100. De extra bytes op elke pagina helpen om paginasplitsingen te minimaliseren die worden veroorzaakt door extra lengte in de rijen.

Veiligheid

Machtigingen

Vereist ALTER-machtigingen voor de tabel of weergave. De gebruiker moet lid zijn van de sysadmin vaste serverfunctie of de db_ddladmin en db_owner vaste databaserollen.

SQL Server Management Studio gebruiken

Een opvulfactor opgeven met behulp van Table Designer

  1. Klik in Objectverkenner op het plusteken om de database uit te vouwen die de tabel bevat waarop u de opvulfactor van een index wilt opgeven.

  2. Klik op het plusteken om de map Tabellen uit te vouwen.

  3. Klik met de rechtermuisknop op de tabel waarop u de vulfactor van een index wilt opgeven en selecteer Ontwerp.

  4. Klik in het menu Tabelontwerper op de menuoptie Indexen/Sleutels.

  5. Selecteer de index met de vulfactor die u wilt opgeven.

  6. Vouw opvulspecificatieuit, selecteer de opvulfactor rij en voer de gewenste vulfactor in de rij in.

  7. Klik op sluiten.

  8. Selecteer in het menu Bestand de optie Opslaantable_name.

Een vulfactor opgeven in een index met behulp van Objectverkenner

  1. Klik in Objectverkenner op het plusteken om de database uit te vouwen die de tabel bevat waarop u de opvulfactor van een index wilt opgeven.

  2. Klik op het plusteken om de map Tabellen uit te vouwen.

  3. Klik op het plusteken om de tabel uit te vouwen waarop u de vulfactor van een index wilt opgeven.

  4. Klik op het plusteken om de map Indexen uit te vouwen.

  5. Klik met de rechtermuisknop op de index met de vulfactor die u wilt opgeven en selecteer Eigenschappen.

  6. Onder Een pagina selecteren, selecteer Opties.

  7. Voer in de rij vulfactor de gewenste opvulfactor in.

  8. Klik op OK-.

Transact-SQL gebruiken

Een opvulfactor opgeven in een bestaande index

  1. Maak in Objectverkennerverbinding met een exemplaar van Database Engine.

  2. Klik op Nieuwe queryin de standaardbalk.

  3. Kopieer en plak het volgende voorbeeld in het queryvenster en klik op uitvoeren. In het voorbeeld wordt een bestaande index opnieuw opgebouwd en wordt de opgegeven opvulfactor toegepast tijdens de herbouwbewerking.

    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  
    

Een andere manier om een opvulfactor in een index op te geven

  1. Maak in Objectverkennerverbinding met een exemplaar van database-engine.

  2. Klik op de standaardbalk op Nieuwe query.

  3. Kopieer en plak het volgende voorbeeld in het queryvenster en klik op uitvoeren.

    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  
    

Zie ALTER INDEX (Transact-SQL)voor meer informatie.