Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL Database w Microsoft Fabric
W tym temacie opisano współczynnik wypełnienia i sposób określania wartości współczynnika wypełnienia w indeksie w programie SQL Server przy użyciu programu SQL Server Management Studio lub Transact-SQL.
Opcja wypełniania-faktora (fill-factor) jest dostępna, aby precyzyjnie dostrajać magazynowanie danych indeksu i poprawić wydajność. Podczas tworzenia lub odbudowy indeksu wartość współczynnika wypełnienia określa procent miejsca na każdej stronie na poziomie liścia, który ma być wypełniony danymi, rezerwując resztę na każdej stronie jako wolne miejsce na przyszły wzrost. Na przykład określenie wartości współczynnika wypełnienia 80 oznacza, że 20 procent każdej strony na poziomie liścia pozostanie puste, zapewniając miejsce na rozszerzenie indeksu w miarę dodawania danych do tabeli bazowej. Puste miejsce jest zarezerwowane między wierszami indeksu, a nie na końcu indeksu.
Wartość współczynnika wypełnienia jest wartością procentową z zakresu od 1 do 100, a domyślna wartość serwera to 0, co oznacza, że strony na poziomie liścia są wypełnione pojemnością.
Notatka
Wartości współczynnika wypełnienia 0 i 100 są takie same we wszystkich aspektach.
w tym temacie
Przed rozpoczęciem:
Aby określić współczynnik wypełnienia indeksu przy użyciu:
Przed rozpoczęciem
Zagadnienia dotyczące wydajności
Podziały stron
Poprawnie wybrana wartość współczynnika wypełnienia może zmniejszyć potencjalne podziały stron, zapewniając wystarczającą ilość miejsca na rozszerzenie indeksu w miarę dodawania danych do tabeli bazowej. Po dodaniu nowego wiersza do pełnej strony indeksu aparat bazy danych przenosi około połowy wierszy na nową stronę, aby utworzyć miejsce dla nowego wiersza. Ta reorganizacja jest znana jako podział strony. Podział strony tworzy miejsce na nowe rekordy, ale może wymagać czasu i jest operacją zasobochłonną. Ponadto może to spowodować fragmentację, która powoduje zwiększenie liczby operacji we/wy. W przypadku częstych podziałów stron indeks można ponownie skompilować przy użyciu nowej lub istniejącej wartości współczynnika wypełnienia w celu ponownego dystrybuowania danych. Aby uzyskać więcej informacji, zobacz Zorganizuj i przebuduj indeksy.
Mimo że niska, niezerowa wartość współczynnika wypełnienia może zmniejszyć wymóg dzielenia stron w miarę wzrostu indeksu, indeks będzie wymagał większej ilości miejsca do magazynowania i może zmniejszyć wydajność odczytu. Nawet w przypadku aplikacji zorientowanej na wiele operacji wstawiania i aktualizacji liczba odczytów bazy danych zwykle przewyższa liczbę zapisów bazy danych według współczynnika od 5 do 10. W związku z tym określenie współczynnika wypełnienia innego niż domyślna może zmniejszyć wydajność odczytu bazy danych o kwotę odwrotnie proporcjonalną do ustawienia współczynnika wypełnienia. Na przykład wartość współczynnika wypełnienia 50 może spowodować spadek wydajności odczytu bazy danych o dwa razy. Wydajność odczytu jest zmniejszona, ponieważ indeks zawiera więcej stron, co zwiększa liczbę operacji we/wy dysku wymaganych do pobrania danych.
Dodawanie danych na końcu tabeli
Współczynnik wypełnienia niezerowego inny niż 0 lub 100 może być dobry dla wydajności, jeśli nowe dane są równomiernie rozłożone w całej tabeli. Jeśli jednak wszystkie dane zostaną dodane na końcu tabeli, puste miejsce na stronach indeksu nie zostanie wypełnione. Jeśli na przykład kolumna klucza indeksu jest kolumną IDENTITY, klucz dla nowych wierszy zawsze rośnie, a wiersze indeksu są logicznie dodawane na końcu indeksu. Jeśli istniejące wiersze zostaną zaktualizowane przy użyciu danych, które wydłużają rozmiar wierszy, użyj współczynnika wypełnienia mniejszego niż 100. Dodatkowe bajty na każdej stronie pomogą zminimalizować podziały stron spowodowane dodatkową długością wierszy.
Bezpieczeństwo
Uprawnienia
Wymaga uprawnienia ALTER w tabeli lub widoku. Użytkownik musi być członkiem stałej roli serwera sysadmin lub stałych ról bazy danych db_ddladmin oraz db_owner.
Korzystanie z programu SQL Server Management Studio
Aby określić współczynnik wypełnienia przy użyciu projektanta tabel
W Eksploratorze obiektów kliknij znak plus, aby rozwinąć bazę danych zawierającą tabelę, na której chcesz określić współczynnik wypełnienia indeksu.
Kliknij znak plusa, aby rozwinąć folder Tables.
Kliknij prawym przyciskiem myszy tabelę, na której chcesz określić współczynnik wypełnienia indeksu, a następnie wybierz pozycję Design.
W menu Projektant Tabel kliknij Indeksy/Klucze.
Wybierz indeks ze współczynnikiem wypełnienia, który chcesz określić.
Rozwiń specyfikacji wypełnienia, wybierz wiersz fill factor i wprowadź odpowiedni współczynnik wypełnienia w wierszu.
Kliknij pozycję Zamknij.
W menu Plik wybierz pozycję Zapisztable_name.
Aby określić współczynnik wypełnienia w indeksie przy użyciu Eksploratora obiektów
W Eksploratorze obiektów kliknij znak plus, aby rozwinąć bazę danych zawierającą tabelę, na której chcesz określić współczynnik wypełnienia indeksu.
Kliknij znak plusa, aby rozwinąć folder Tables.
Kliknij znak plusa, aby rozwinąć tabelę, na której chcesz określić współczynnik wypełnienia indeksu.
Kliknij symbol plus, aby rozwinąć folder Indeksy.
Kliknij prawym przyciskiem myszy indeks ze współczynnikiem wypełnienia, który chcesz określić, i wybierz Właściwości.
W obszarze Wybierz stronęwybierz pozycję Opcje.
W wierszu współczynnika wypełnienia wprowadź współczynnik wypełnienia, który chcesz.
Kliknij przycisk OK.
Korzystanie z Transact-SQL
Aby określić współczynnik wypełnienia w istniejącym indeksie
W eksploratorze obiektównawiąż połączenie z wystąpieniem Silnika bazy danych.
Na pasku standardowym kliknij pozycję Nowe zapytanie.
Skopiuj i wklej poniższy przykład w oknie zapytania, a następnie kliknij pozycję Wykonaj. Przykład ponownie kompiluje istniejący indeks i stosuje określony współczynnik wypełnienia podczas operacji ponownego kompilowania.
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
Inny sposób określania współczynnika wypełnienia w indeksie
W Eksploratorze Obiektów nawiąż połączenie z wystąpieniem Silnika bazy danych.
Na pasku Standardowa kliknij pozycję Nowe zapytanie.
Skopiuj i wklej poniższy przykład w oknie zapytania, a następnie kliknij pozycję Wykonaj.
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
Aby uzyskać więcej informacji, zobacz ALTER INDEX (Transact-SQL).