Tworzenie indeksu unikatowego
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL Database w usłudze Microsoft Fabric
W tym temacie opisano sposób tworzenia unikatowego indeksu w tabeli w programie SQL Server przy użyciu programu SQL Server Management Studio lub Języka Transact-SQL. Unikatowy indeks gwarantuje, że klucz indeksu nie zawiera zduplikowanych wartości i dlatego każdy wiersz w tabeli jest w jakiś sposób unikatowy. Nie ma znaczących różnic między tworzeniem ograniczenia UNIQUE a tworzeniem unikatowego indeksu, który jest niezależny od ograniczenia. Walidacja danych odbywa się w ten sam sposób, a optymalizator zapytań nie rozróżnia unikatowego indeksu utworzonego przez ograniczenie lub utworzone ręcznie. Jednak utworzenie ograniczenia UNIQUE w kolumnie sprawia, że cel indeksu jest jasny. Aby uzyskać więcej informacji na temat ograniczeń unikalnych, zobacz Ograniczenia unikalne i ograniczenia sprawdzające.
Podczas tworzenia indeksu unikatowego można ustawić opcję ignorowania zduplikowanych kluczy. Jeśli ta opcja jest ustawiona na Tak i próbujesz utworzyć zduplikowane klucze, dodając dane wpływające na wiele wierszy (z instrukcją INSERT), wiersz zawierający duplikat nie zostanie dodany. Jeśli ustawiono wartość Brak, cała operacja wstawiania kończy się niepowodzeniem i wszystkie dane zostają wycofane.
Notatka
Nie można utworzyć unikatowego indeksu w jednej kolumnie, jeśli ta kolumna zawiera wartość NULL w więcej niż jednym wierszu. Podobnie nie można utworzyć unikatowego indeksu w wielu kolumnach, jeśli kombinacja kolumn zawiera wartość NULL w więcej niż jednym wierszu. Są one traktowane jako zduplikowane wartości do celów indeksowania.
w tym temacie
Przed rozpoczęciem:
Aby utworzyć unikatowy indeks w tabeli przy użyciu:
Przed rozpoczęciem
Zalety indeksu unikatowego
Indeksy unikatowe wielokolumnowe gwarantują, że każda kombinacja wartości w kluczu indeksu jest unikatowa. Jeśli na przykład unikatowy indeks jest tworzony w połączeniu LastName, FirstNamei MiddleName kolumn, żadne dwa wiersze w tabeli nie mogą mieć tej samej kombinacji wartości dla tych kolumn.
Pod warunkiem, że dane w każdej kolumnie są unikatowe, można utworzyć zarówno unikatowy indeks klastrowany, jak i wiele unikatowych indeksów nieklastrowanych w tej samej tabeli.
Indeksy unikatowe zapewniają integralność danych zdefiniowanych kolumn.
Unikatowe indeksy zawierają dodatkowe informacje pomocne dla optymalizatora zapytań, które mogą tworzyć bardziej wydajne plany wykonywania.
Typowe implementacje
Unikatowe indeksy są implementowane w następujący sposób:
KLUCZ PODSTAWOWY lub UNIKATOWE ograniczenie
Podczas tworzenia ograniczenia KLUCZA PODSTAWOWEgo unikatowy indeks klastrowany w kolumnie lub kolumnach jest tworzony automatycznie, jeśli indeks klastrowany w tabeli 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, aby domyślnie wymusić ograniczenie UNIKATOWe. Można określić unikatowy indeks klastrowany, jeśli indeks klastrowany w tabeli jeszcze nie istnieje.
Aby uzyskać więcej informacji, zapoznaj się z ograniczeniami unikatowymi i ograniczeniami sprawdzającymi oraz ograniczeniami klucza podstawowego i klucza obcego.
indeks niezależny od ograniczenia
W tabeli można zdefiniować wiele unikatowych indeksów nieklastrowanych.
Aby uzyskać więcej informacji, zobacz CREATE INDEX (Transact-SQL).
widok indeksowany
Aby utworzyć widok indeksowany, unikatowy indeks klastrowany jest definiowany na co najmniej jednej kolumnie widoku. Widok jest realizowany, a zestaw wyników jest przechowywany na poziomie liści indeksu, podobnie jak dane tabeli są przechowywane w indeksie klastrowanym. Aby uzyskać więcej informacji, zobacz Create Indexed Views.
Ograniczenia i ograniczenia
Nie można utworzyć unikatowego indeksu, ograniczenia UNIKATOWEGO lub ograniczenia KLUCZA PODSTAWOWEgo, jeśli w danych istnieją zduplikowane wartości kluczy.
Unikatowy indeks nieklastrowany może zawierać dołączone kolumny inne niż kluczowe. Aby uzyskać więcej informacji, zobacz Tworzenie indeksu z dołączonymi kolumnami.
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 i db_owner.
Korzystanie z programu SQL Server Management Studio
Aby utworzyć unikatowy indeks przy użyciu projektanta tabel
W Eksploratorze obiektów rozwiń bazę danych zawierającą tabelę, w której chcesz utworzyć unikatowy indeks.
Rozwiń folder Tables.
Kliknij prawym przyciskiem myszy tabelę, w której chcesz utworzyć unikatowy indeks, a następnie wybierz pozycję Design.
W menu Projektanta Tabel wybierz opcję Indeksy/Klucze .
W oknie dialogowym Indeksów/Kluczy kliknij Dodaj.
Wybierz nowy indeks w polu tekstowym Wybrany klucz podstawowy/unikatowy lub indeks.
W siatce głównej w obszarze (Ogólne)wybierz pozycję Typ, a następnie wybierz pozycję Indeks z listy.
Wybierz Columns, a następnie kliknij ikonę wielokropka (...).
W oknie dialogowym Kolumny Indeksów, w obszarze Nazwa Kolumny , wybierz kolumny, które chcesz indeksować. Możesz wybrać maksymalnie 16 kolumn. Aby uzyskać optymalną wydajność, wybierz tylko jedną lub dwie kolumny na indeks. Dla każdej wybranej kolumny wskaż, czy indeks rozmieści wartości tej kolumny w kolejności rosnącej, czy malejącej.
Po wybraniu wszystkich kolumn indeksu kliknij przycisk OK.
W siatce, w obszarze (Ogólne), wybierz Unikalność, a następnie wybierz z listy Tak.
Opcjonalnie: W siatce głównej w obszarze Projektant tabelwybierz pozycję Ignoruj zduplikowane klucze, a następnie wybierz z listy Tak. Zrób to, jeśli chcesz zignorować próby dodania danych, które spowodują utworzenie zduplikowanego klucza w indeksie unikatowym.
Kliknij Zamknij.
W menu Plik kliknij Zapisztable_name.
Tworzenie indeksu unikatowego przy użyciu Eksploratora obiektów
W Eksploratorze obiektów rozwiń bazę danych zawierającą tabelę, w której chcesz utworzyć unikatowy indeks.
Rozwiń folder Tables.
Rozwiń tabelę, w której chcesz utworzyć unikatowy indeks.
Kliknij prawym przyciskiem myszy folder Indeksy, wskaż polecenie Nowy indeksi wybierz pozycję Indeks nieklasterowany....
W oknie dialogowym Nowy indeks na stronie Ogólne w polu nazwa indeksu wprowadź nazwę nowego indeksu.
Zaznacz pole wyboru Unikatowe.
W obszarze Kolumny klucza indeksukliknij pozycję Dodaj....
W oknie dialogowym Wybierz kolumny ztable_name zaznacz pole lub pola wyboru kolumn tabeli, które mają zostać dodane do unikatowego indeksu.
Kliknij przycisk OK.
W oknie dialogowym nowego indeksu kliknij przycisk OK.
Korzystanie z Transact-SQL
Aby utworzyć unikatowy indeks w tabeli
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 -- Find an existing index named AK_UnitMeasure_Name -- on the Production.UnitMeasure table and delete it if found. IF EXISTS (SELECT name from sys.indexes WHERE name = N'AK_UnitMeasure_Name' AND object_id = OBJECT_ID(N'Production.UnitMeasure', N'U')) DROP INDEX AK_UnitMeasure_Name ON Production.UnitMeasure; GO -- Create a unique index called AK_UnitMeasure_Name -- on the Production.UnitMeasure table using the Name column. CREATE UNIQUE INDEX AK_UnitMeasure_Name ON Production.UnitMeasure (Name); GO
Aby uzyskać więcej informacji, zobacz CREATE INDEX (Transact-SQL).