Tworzenie indeksów unikatowych

Tworzenie indeks unikatowy gwarantuje, że próby zduplikowane klucz wartości kończy się niepowodzeniem.Nie istnieją znaczne różnice między Tworzenie ograniczenia UNIQUE i tworzenie indeks unikatowy zależy od ograniczenia.Sprawdzanie poprawności danych odbywa się w taki sam sposób i optymalizator kwerendy nie odróżnić indeks unikatowy, utworzona przez ograniczenie lub utworzone ręcznie.Jednakże, należy utworzyć ograniczenie UNIQUE na kolumna gdy celem jest integralność danych.Dzięki temu celem wyczyść indeksu.

Typowej implementacji

Unikatowe indeksy są implementowane w następujący sposób:

  • Ograniczenie na klucz podstawowy lub unikatowe

    Podczas tworzenia ograniczenia PRIMARY KEY unikatowego indeks klastrowany na kolumna lub kolumna jest tworzona automatycznie, jeśli indeks klastrowany w tabela nie istnieje i nie określisz unikatowy indeks nieklastrowany.klucz podstawowy Kolumny nie zezwalaj na wartości NULL.

    Podczas tworzenia ograniczenia typu UNIQUE, aby wymusić ograniczenia UNIQUE jest tworzony unikatowy indeks nieklastrowany domyślnie.Można określić unikatowego indeks klastrowany indeks klastrowany w tabela nie istnieje.

    Aby uzyskać więcej informacji, zobacz Ograniczenie na klucz podstawowy i Ograniczenie typu UNIQUE.

  • Niezależne od indeksu ograniczenia

    W tabela można zdefiniować wiele unikatowych zbudowania indeksów nie klastrowanych.

    Aby uzyskać więcej informacji, zobacz CREATE INDEX (Transact-SQL).

  • Widok indeksowany

    Aby utworzyć indeksowany widok, unikatowy indeks klastrowany jest zdefiniowany na jedną lub więcej kolumn widoku.Widok jest wykonywany (materialized) i zestaw wyników jest przechowywany w poziom liścia poziom indeksu w ten sam sposób danych tabela są przechowywane w indeksie klastrowanym.Aby uzyskać więcej informacji, zobacz Tworzenie widoków indeksowanych.

Rozwiązywanie problemów z zduplikowana wartość

A indeks unikatowy lub ograniczenia nie można utworzyć, jeśli istnieją zduplikowane wartości w kolumnach klucz.Na przykład, jeśli chcesz utworzyć indeks unikatowy złożony w kolumnach Imię i nazwisko, ale istnieją dwa wiersze w tabela, które zawierają wartości **"Jan"**i 'Smith' w Imię i nazwiskokolumny, nie można utworzyć indeks unikatowy.Problem można rozwiązać w jednym z następujących sposobów:

  • Dodawanie lub usuwanie kolumn w definicji indeksu, aby utworzyć unikatowy projekt wstępny.W poprzednim przykładzie dodając MiddleName kolumna do definicji indeksu może rozwiązać problem duplikacji.

  • Zduplikowane wartości są wynikiem błędów przy wprowadzaniu danych, ręcznego poprawiania danych, a następnie utworzyć indeks lub ograniczenie.

Za pomocą opcji IGNORE_DUP_KEY wartości zduplikowany uchwyt

Podczas tworzenia lub modyfikowania ograniczenie lub indeks unikatowy, zestaw opcję IGNORE_DUP_KEY ON lub OFF.Ta opcja określa odpowiedzi komunikat o błędzie podczas próby wstawienia duplikat operacji wstawiania klucz wartości pod indeks unikatowy.Opcja IGNORE_DUP_KEY dotyczy tylko wstawianie operacji po utworzeniu indeksu lub przebudowanych.Nie ma opcji Kiedy mocą CREATE INDEX, Zmianę INDEKSU, lub Aktualizacja jest wykonywany.Domyślnie jest wyłączone.

  • NA
    Nastąpi komunikat ostrzegawczy, gdy zduplikowane wartości kluczy są wstawiane do indeks unikatowy.Tylko wiersze naruszenie ograniczenia unikatowości nie powiedzie się.

  • WYŁĄCZANIE
    Komunikat o błędzie ma miejsce, gdy zduplikowane wartości kluczy są wstawiane do indeks unikatowy.Cała operacja WSTAWIANIA zostanie wycofana.

Na przykład, jeśli pojedynczej instrukcja wstawia 20 wierszy do tabela z indeks unikatowyi 10 wiersze te zawierają zduplikowane wartości kluczy, domyślnie wszystkie wiersze 20 są odrzucane.Jednakże jeżeli indeks opcji IGNORE_DUP_klucz jest włączone, zduplikowane 10 klucz wartości zostanie odrzucona; Pozostałe 10 niepowtarzalnych klucz wartości zostaną wstawione do tabela.

IGNORE_DUP_KEY nie może być na indeksy utworzone na widok, indeksów nieunikatowych, indeksy XML, indeksy przestrzenne i filtrowane indeksy.

Służy do wyświetlania IGNORE_DUP_KEY, sys.indexes.

Składnia zgodna z poprzednimi wersjami, Z IGNORE_DUP_KEY jest równoważne Z IGNORE_DUP_KEY = ON.

Obsługa wartości NULL

Indeksowanie celów, jako równe porównać wartości NULL.Dlatego nie można utworzyć indeks unikatowy lub ograniczenie UNIQUE, jeśli wartości klucz są wartości NULL w więcej niż jeden wiersz.Wybieranie kolumn, które są zdefiniowane jako NOT NULL, wybierając kolumny indeks unikatowy lub ograniczenie unique.

Wymagania dotyczące miejsca na dysku

Proces określania wymagań dotyczących miejsca na dysku dla indeksów unikatowych jest taki sam jak indeksy klastrowane i nieklastrowany.Aby uzyskać informacje dotyczące wymagań dotyczących miejsca na dysku dla indeksów, zobacz Określanie wymagań dotyczących miejsca na dysku indeksu.

Aby utworzyć indeks, podczas tworzenia tabela

CREATE TABLE (Transact-SQL)

Aby utworzyć indeks w istniejącej tabela

CREATE INDEX (Transact-SQL)