Angeben des Füllfaktors für einen IndexSpecify Fill Factor for an Index

DIESES THEMA GILT FÜR:jaSQL Server (ab 2016)jaAzure SQL-DatenbankneinAzure SQL Data Warehouse neinParallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL Server (starting with 2016)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

In diesem Thema wird beschrieben, was ein Füllfaktor ist und wie ein Füllfaktorwert in SQL Server 2017SQL Server 2017 für einen Index mithilfe von SQL Server Management StudioSQL Server Management Studio oder Transact-SQLTransact-SQLangegeben wird.This topic describes what fill factor is and how to specify a fill factor value on an index in SQL Server 2017SQL Server 2017 by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL.

Die Füllfaktoroption wird zur erweiterten Leistungsoptimierung beim Speichern von Indexdaten bereitgestellt.The fill-factor option is provided for fine-tuning index data storage and performance. Wenn ein Index erstellt oder neu erstellt wird, bestimmt der Füllfaktorwert den prozentualen Speicherplatz, der auf jeder Blattebenenseite mit Daten gefüllt werden soll. Der Rest jeder Seite wird als freier Speicherplatz für zukünftige Erweiterungen reserviert.When an index is created or rebuilt, the fill-factor value determines the percentage of space on each leaf-level page to be filled with data, reserving the remainder on each page as free space for future growth. Wenn Sie beispielsweise einen Füllfaktorwert von 80 angeben, bedeutet dies, dass 20 Prozent jeder Seite auf der Blattebene leer gelassen werden, um Speicherplatz für zukünftige Indexerweiterungen bereitzustellen, während der zugrunde liegenden Tabelle Daten hinzugefügt werden.For example, specifying a fill-factor value of 80 means that 20 percent of each leaf-level page will be left empty, providing space for index expansion as data is added to the underlying table. Der freie Speicherplatz wird zwischen den Indexzeilen statt am Ende des Indexes reserviert.The empty space is reserved between the index rows rather than at the end of the index.

Der Wert des Füllfaktors ist ein Prozentwert von 1 bis 100, und der serverweite Standardwert ist 0, d. h., dass die Seiten auf Blattebene vollständig aufgefüllt werden.The fill-factor value is a percentage from 1 to 100, and the server-wide default is 0 which means that the leaf-level pages are filled to capacity.

Hinweis

Die Füllfaktorwerte 0 und 100 sind in jeder Hinsicht identisch.Fill-factor values 0 and 100 are the same in all respects.

In diesem ThemaIn This Topic

Vorbereitungen Before You Begin

Leistungsaspekte Performance Considerations

SeitenteilungPage Splits

Mit einem richtig ausgewählten Füllfaktor kann das Risiko von Seitenteilungen verringert werden, indem genug Speicherplatz für Indexerweiterungen bereitgestellt wird, während der dem Index zugrunde liegenden Tabelle Daten hinzugefügt werden. Wenn einer vollen Indexseite eine neue Zeile hinzugefügt wird, verschiebt DatenbankmodulDatabase Engine ungefähr die Hälfte der Zeilen auf eine neue Seite, um Platz für die neue Zeile bereitzustellen.A correctly chosen fill-factor value can reduce potential page splits by providing enough space for index expansion as data is added to the underlying table.When a new row is added to a full index page, the DatenbankmodulDatabase Engine moves approximately half the rows to a new page to make room for the new row. Diese Neuorganisation wird auch Seitenteilung genannt.This reorganization is known as a page split. Eine Seitenteilung schafft Platz für neue Datensätze, beansprucht jedoch Zeit und Ressourcen.A page split makes room for new records, but can take time to perform and is a resource intensive operation. Seitenteilungen können auch Fragmentierungen verursachen, die zu vermehrten E/A-Vorgängen führen.Also, it can cause fragmentation that causes increased I/O operations. Bei häufigen Seitenteilungen kann der Index neu erstellt und dabei ein neuer oder bereits vorhandener Füllfaktor verwendet werden, um die Daten neu zu verteilen.When frequent page splits occur, the index can be rebuilt by using a new or existing fill-factor value to redistribute the data. Weitere Informationen finden Sie unter Neuorganisieren und Neuerstellen von Indizes.For more information, see Reorganize and Rebuild Indexes.

Ein niedriger Füllfaktor über 0 kann zwar beim Vergrößern des Indexes die Seitenteilung reduzieren; der Index erfordert dann jedoch mehr Speicherplatz, was die Leseleistung verringern kann.Although a low, nonzero fill-factor value may reduce the requirement to split pages as the index grows, the index will require more storage space and can decrease read performance. Sogar im Fall einer Anwendung, die sehr viele Einfügungen und Aktualisierungen vornimmt, treten Datenbanklesevorgänge in der Regel fünf- bis zehnmal häufiger auf als Schreibvorgänge in der Datenbank.Even for an application oriented for many insert and update operations, the number of database reads typically outnumber database writes by a factor of 5 to 10. Aus diesem Grund kann das Ändern des Standardfüllfaktors die Leistung von Datenbanklesevorgängen in einem Umfang mindern, der umgekehrt proportional zur Füllfaktoreinstellung ist.Therefore, specifying a fill factor other than the default can decrease database read performance by an amount inversely proportional to the fill-factor setting. Ein Füllfaktorwert von 50 Prozent kann z. B. dazu führen, dass die Dauer von Datenbanklesevorgängen verdoppelt wird.For example, a fill-factor value of 50 can cause database read performance to decrease by two times. Die Leseleistung verringert sich, weil der Index eine größere Anzahl an Seiten enthält und daher die zum Abrufen der Daten erforderlichen Datenträger-E/A-Vorgänge zunehmen.Read performance is decreased because the index contains more pages, therefore increasing the disk IO operations required to retrieve the data.

Hinzufügen von Daten zum TabellenendeAdding Data to the End of the Table

Ein Füllfaktor ungleich 0 oder 100 kann zur Leistungsverbesserung beitragen, wenn die neuen Daten gleichmäßig in der Tabelle verteilt werden.A nonzero fill factor other than 0 or 100 can be good for performance if the new data is evenly distributed throughout the table. Wenn jedoch alle Daten am Tabellenende hinzugefügt werden, wird der freie Speicherplatz auf den Indexseiten nicht aufgefüllt.However, if all the data is added to the end of the table, the empty space in the index pages will not be filled. Wenn die Indexschlüsselspalte z. B. eine IDENTITY-Spalte ist, wird der Schlüssel für neue Zeilen stets erhöht, und die Indexzeilen werden am Ende des Indexes logisch hinzugefügt.For example, if the index key column is an IDENTITY column, the key for new rows is always increasing and the index rows are logically added to the end of the index. Wenn vorhandene Zeilen mit Daten aktualisiert werden, die die Größe der Zeilen verlängern, verwenden Sie einen Füllfaktor von weniger als 100.If existing rows will be updated with data that lengthens the size of the rows, use a fill factor of less than 100. Durch die zusätzlichen Bytes auf jeder Seite werden die Seitenteilungen minimiert, die durch die zusätzliche Länge der Zeilen verursach werden.The extra bytes on each page will help to minimize page splits caused by extra length in the rows.

Sicherheit Security

Berechtigungen Permissions

Erfordert die ALTER-Berechtigung in der Tabelle oder Sicht.Requires ALTER permission on the table or view. Der Benutzer muss ein Mitglied der festen Serverrolle sysadmin bzw. der festen Datenbankrollen db_ddladmin und db_owner sein.User must be a member of the sysadmin fixed server role or the db_ddladmin and db_owner fixed database roles.

Verwendung von SQL Server Management Studio Using SQL Server Management Studio

So geben Sie einen Füllfaktor mit dem Tabellen-Designer anTo specify a fill factor by using Table Designer

  1. Klicken Sie im Objekt-Explorer auf das Pluszeichen, um die Datenbank mit der Tabelle zu erweitern, für die Sie den Füllfaktor eines Indexes angeben möchten.In Object Explorer, click the plus sign to expand the database that contains the table on which you want to specify an index’s fill factor.

  2. Klicken Sie auf das Pluszeichen, um den Ordner Tabellen zu erweitern.Click the plus sign to expand the Tables folder.

  3. Klicken Sie mit der rechten Maustaste auf die Tabelle, für die Sie den Füllfaktor eines Indexes angeben möchten, und wählen Sie die Option Entwurf.Right-click the table on which you want to specify an index’s fill factor and select Design.

  4. Klicken Sie im Menü Tabellen-Designer auf Indizes/Schlüssel.On the Table Designer menu, click Indexes/Keys.

  5. Wählen Sie den Index mit dem Füllfaktor aus, den Sie angeben möchten.Select the index with the fill factor that you want to specify.

  6. Erweitern Sie Füllspezifikation, wählen Sie die Zeile Füllfaktor aus, und geben Sie den gewünschten Füllfaktor in die Zeile ein.Expand Fill Specification, select the Fill Factor row and enter the fill factor you want in the row.

  7. Klicken Sie auf Schließen.Click Close.

  8. Klicken Sie im Menü Datei auf Speicherntable_name.On the File menu, select Savetable_name.

So geben Sie einen Füllfaktor in einem Index mit dem Objekt-Explorer anTo specify a fill factor in an index by using Object Explorer

  1. Klicken Sie im Objekt-Explorer auf das Pluszeichen, um die Datenbank mit der Tabelle zu erweitern, für die Sie den Füllfaktor eines Indexes angeben möchten.In Object Explorer, click the plus sign to expand the database that contains the table on which you want to specify an index’s fill factor.

  2. Klicken Sie auf das Pluszeichen, um den Ordner Tabellen zu erweitern.Click the plus sign to expand the Tables folder.

  3. Klicken Sie auf das Pluszeichen, um die Tabelle zu erweitern, für die Sie den Füllfaktor eines Indexes angeben möchten.Click the plus sign to expand the table on which you want to specify an index’s fill factor.

  4. Klicken Sie auf das Pluszeichen, um den Ordner Indizes zu erweitern.Click the plus sign to expand the Indexes folder.

  5. Klicken Sie mit der rechten Maustaste auf den Index mit dem Füllfaktor, den Sie angeben möchten, und wählen Sie Eigenschaften.Right-click the index with the fill factor that you want to specify and select Properties.

  6. Wählen Sie unter Seite auswählendie Option Optionenaus.Under Select a page, select Options.

  7. Geben Sie in der Zeile Füllfaktor den gewünschten Füllfaktor ein.In the Fill factor row, enter the fill factor that you want.

  8. Klicken Sie auf OK.Click OK.

Verwenden von Transact-SQL Using Transact-SQL

So geben Sie einen Füllfaktor für einen vorhandenen Index anTo specify a fill factor in an existing index

  1. Stellen Sie im Objekt-Explorer **** eine Verbindung mit einer DatenbankmodulDatabase Engine-Instanz her.In Object Explorer, connect to an instance of DatenbankmodulDatabase Engine.

  2. Klicken Sie in der Standardleiste auf Neue Abfrage.On the Standard bar, click New Query.

  3. Kopieren Sie das folgende Beispiel, fügen Sie es in das Abfragefenster ein, und klicken Sie auf Ausführen.Copy and paste the following example into the query window and click Execute. Im folgenden Beispiel wird ein vorhandener Index neu erstellt und der angegebene Füllfaktor während der Neuerstellung angewendet.The example rebuilds an existing index and applies the specified fill factor during the rebuild operation.

    USE AdventureWorks2012;  
    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  
    

Alternative Möglichkeit zum Angeben eines Füllfaktors in einem IndexAnother way to specify a fill factor in an index

  1. Stellen Sie im Objekt-Explorer **** eine Verbindung mit einer DatenbankmodulDatabase Engine-Instanz her.In Object Explorer, connect to an instance of DatenbankmodulDatabase Engine.

  2. Klicken Sie in der Standardleiste auf Neue Abfrage.On the Standard bar, click New Query.

  3. Kopieren Sie das folgende Beispiel, fügen Sie es in das Abfragefenster ein, und klicken Sie auf Ausführen.Copy and paste the following example into the query window and click Execute.

    USE AdventureWorks2012;  
    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  
    

    Weitere Informationen finden Sie unter ALTER INDEX (Transact-SQL).For more information, see ALTER INDEX (Transact-SQL).