Tworzenie indeksu klastrowanego
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL Database w usłudze Microsoft Fabric
Indeksy klastrowane można tworzyć w tabelach przy użyciu programu SQL Server Management Studio lub Języka Transact-SQL. Z kilkoma wyjątkami każda tabela powinna mieć indeks klastrowany. Oprócz poprawy wydajności zapytań indeks klastrowany można ponownie skompilować lub zreorganizować na żądanie w celu kontrolowania fragmentacji tabeli. Indeks klastrowany można również utworzyć w widoku. (Indeksy klastrowane są definiowane w artykule Klastrowane i nieklastrowane indeksy.)
Typowe implementacje
Indeksy klastrowane są implementowane w następujący sposób:
KLUCZ PODSTAWOWY i UNIKALNE OGRANICZENIA
Podczas tworzenia ograniczenia
PRIMARY KEY
unikatowy indeks klastrowany w kolumnie lub kolumnach jest tworzony automatycznie, jeśli indeks klastrowany w tabeli jeszcze nie istnieje i nie określasz unikatowego indeksu nieklastrowanego. Kolumna klucza podstawowego nie może zezwalać na wartościNULL
.Podczas tworzenia ograniczenia
UNIQUE
tworzony jest unikatowy indeks nieklastrowany w celu wymuszenia domyślnie ograniczeniaUNIQUE
. Można określić unikatowy indeks klastrowany, jeśli indeks klastrowany w tabeli jeszcze nie istnieje.Indeks utworzony w ramach ograniczenia jest automatycznie nadany tej samej nazwie co nazwa ograniczenia. Aby uzyskać więcej informacji, zobacz ograniczenia klucza podstawowego i obcego oraz ograniczenia unikatowe i ograniczenia sprawdzające.
indeks niezależny od ograniczenia
Indeks klastrowany można utworzyć w kolumnie innej niż kolumna klucza podstawowego, jeśli określono nieklastrowane ograniczenie klucza podstawowego.
Ograniczenia
Po utworzeniu struktury indeksu klastrowanego miejsce na dysku dla starych (źródłowych) i nowych (docelowych) struktur jest wymagane w odpowiednich plikach i grupach plików. Stara struktura nie jest zwalniana, dopóki transakcja nie zostanie w pełni zatwierdzona. Może być również wymagane dodatkowe tymczasowe miejsce na dysku do sortowania. Aby uzyskać więcej informacji, zobacz Wymagania dotyczące miejsca na dysku dla operacji DDL indeksu.
Jeśli indeks klastrowany jest tworzony na stercie z kilkoma istniejącymi indeksami nieklastrowanymi, wszystkie indeksy nieklastrowane muszą zostać ponownie skompilowane, aby zawierały wartość klucza klastrowania zamiast identyfikatora wiersza (RID). Podobnie, jeśli indeks klastrowany zostanie porzucony w tabeli z kilkoma indeksami nieklastrowanymi, wszystkie indeksy nieklastrowane zostaną ponownie skompilowane w ramach operacji
DROP
. Proces ten może zająć dużo czasu przy dużych tabelach.Preferowanym sposobem tworzenia indeksów w dużych tabelach jest rozpoczęcie od indeksu klastrowanego, a następnie skompilowanie wszystkich indeksów nieklastrowanych. Rozważ ustawienie opcji
ONLINE
włączonej podczas tworzenia indeksów w istniejących tabelach. W przypadku ustawienia opcji WŁ. długoterminowe blokady tabeli nie są przechowywane. Umożliwia to kontynuowanie zapytań lub aktualizacji podstawowej tabeli. Aby uzyskać więcej informacji, zobacz Perform Index Operations Online.Klucz indeksu klastrowanego nie może zawierać kolumn varchar, które mają istniejące dane w jednostce alokacji
ROW_OVERFLOW_DATA
. Jeśli indeks klastrowany jest tworzony w kolumnie varchar, a istniejące dane są w jednostce alokacjiIN_ROW_DATA
, kolejne akcje wstawiania lub aktualizacji w kolumnie, które wypychają dane poza wierszem, kończą się niepowodzeniem. Aby uzyskać informacje o tabelach, które mogą zawierać dane przepełnienia wiersza, użyj dynamicznej funkcji zarządzania sys.dm_db_index_physical_stats (Transact-SQL).
Uprawnienia
Wymaga ALTER
uprawnienia do tabeli lub widoku. Użytkownik musi być członkiem stałej roli serwera sysadmin lub członkiem stałych ról bazy danych db_ddladmin i db_owner.
Korzystanie z programu SQL Server Management Studio
Utwórz indeks klastrowany z Eksploratora obiektów
W Eksploratorze obiektów rozwiń tabelę, w której chcesz utworzyć indeks klastrowany.
Kliknij prawym przyciskiem myszy folder Indeksy, wskaż polecenie Nowy indeksi wybierz pozycję Indeks klastrowany....
W oknie dialogowym Nowy indeks na stronie Ogólne wprowadź nazwę nowego indeksu w polu nazwa indeksu.
W obszarze kolumn kluczy indeksu wybierz pozycję Dodaj....
W oknie dialogowym Wybierz kolumny z tabelitable_name, zaznacz pole wyboru kolumny, którą chcesz dodać do indeksu klastrowanego.
Wybierz pozycję OK.
W oknie dialogowym Nowy indeks wybierz OK.
Tworzenie indeksu klastrowanego przy użyciu projektanta tabel
W Eksploratorze obiektów rozwiń bazę danych, w której chcesz utworzyć tabelę z indeksem klastrowanym.
Kliknij prawym przyciskiem myszy folder Tables i wybierz pozycję Nowa tabela....
Utwórz nową tabelę tak, jak zwykle. Aby uzyskać więcej informacji, zobacz Tworzenie tabel (Silnik bazy danych).
Kliknij prawym przyciskiem myszy utworzoną wcześniej nową tabelę i wybierz pozycję Design.
W menu Projektanta tabel wybierz pozycję Indeksy/klucze .
W oknie dialogowym Indeksy/Klucze wybierz pozycję Dodaj.
Wybierz nowy indeks w polu tekstowym Wybrany klucz podstawowy/unikatowy lub indeks.
W siatce wybierz pozycję Utwórz jako klaster, a następnie wybierz pozycję Tak z listy rozwijanej po prawej stronie właściwości.
Wybierz Zamknij.
W menu Plik wybierz pozycję Zapisztable_name.
Korzystanie z Transact-SQL
W Eksploratorze Obiektów , połącz się z wystąpieniem aparatu bazy danych.
Na pasku narzędzi Standard wybierz pozycję Nowe zapytanie.
Skopiuj poniższy przykład i wklej go w oknie zapytania, a następnie wybierz pozycję Wykonaj.
USE AdventureWorks2022; GO -- Create a new table with three columns. CREATE TABLE dbo.TestTable ( TestCol1 INT NOT NULL, TestCol2 NCHAR(10) NULL, TestCol3 NVARCHAR(50) NULL ); GO -- Create a clustered index called IX_TestTable_TestCol1 -- on the dbo.TestTable table using the TestCol1 column. CREATE CLUSTERED INDEX IX_TestTable_TestCol1 ON dbo.TestTable (TestCol1); GO
Aby uzyskać więcej informacji, zobacz CREATE INDEX (Transact-SQL).