Udostępnij za pośrednictwem


Tworzenie indeksu klastrowanego

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL 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ści NULL.

    Podczas tworzenia ograniczenia UNIQUE tworzony jest unikatowy indeks nieklastrowany w celu wymuszenia domyślnie ograniczenia UNIQUE. 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 alokacji IN_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

  1. W Eksploratorze obiektów rozwiń tabelę, w której chcesz utworzyć indeks klastrowany.

  2. Kliknij prawym przyciskiem myszy folder Indeksy, wskaż polecenie Nowy indeksi wybierz pozycję Indeks klastrowany....

  3. W oknie dialogowym Nowy indeks na stronie Ogólne wprowadź nazwę nowego indeksu w polu nazwa indeksu.

  4. W obszarze kolumn kluczy indeksu wybierz pozycję Dodaj....

  5. W oknie dialogowym Wybierz kolumny z tabelitable_name, zaznacz pole wyboru kolumny, którą chcesz dodać do indeksu klastrowanego.

  6. Wybierz pozycję OK.

  7. W oknie dialogowym Nowy indeks wybierz OK.

Tworzenie indeksu klastrowanego przy użyciu projektanta tabel

  1. W Eksploratorze obiektów rozwiń bazę danych, w której chcesz utworzyć tabelę z indeksem klastrowanym.

  2. Kliknij prawym przyciskiem myszy folder Tables i wybierz pozycję Nowa tabela....

  3. Utwórz nową tabelę tak, jak zwykle. Aby uzyskać więcej informacji, zobacz Tworzenie tabel (Silnik bazy danych).

  4. Kliknij prawym przyciskiem myszy utworzoną wcześniej nową tabelę i wybierz pozycję Design.

  5. W menu Projektanta tabel wybierz pozycję Indeksy/klucze .

  6. W oknie dialogowym Indeksy/Klucze wybierz pozycję Dodaj.

  7. Wybierz nowy indeks w polu tekstowym Wybrany klucz podstawowy/unikatowy lub indeks.

  8. W siatce wybierz pozycję Utwórz jako klaster, a następnie wybierz pozycję Tak z listy rozwijanej po prawej stronie właściwości.

  9. Wybierz Zamknij.

  10. W menu Plik wybierz pozycję Zapisztable_name.

Korzystanie z Transact-SQL

  1. W Eksploratorze Obiektów , połącz się z wystąpieniem aparatu bazy danych.

  2. Na pasku narzędzi Standard wybierz pozycję Nowe zapytanie.

  3. 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).