Kluczowym jest po prostu normalnym indeksu. Sposobem na uproszczenie jest myślenie o niej jak o katalogu kart w bibliotece. Wskazuje MySQL we właściwym kierunku.
Unikalny klucz służy również do poprawy szybkości wyszukiwania, ale ma ograniczenie, że nie może być żadnych duplikatów (nie ma dwóch xiy, gdzie x nie jest y i x == y).
manual wyjaśnia to następująco:
unikatowy indeks tworzy ograniczenie takie, że wszystkie wartości w indeksie musi być wyraźne. Wystąpił błąd podczas próby dodania nowego wiersza o wartości klucza dopasowanej do istniejącego wiersza. Ograniczenie to nie ma zastosowania do wartości NULL z wyjątkiem silnika pamięci BDB. W przypadku innych silników indeks UNIQUE dopuszcza wiele wartości NULL dla kolumn, które mogą zawierać wartość NULL równą . Jeśli określisz wartość prefiksu dla kolumny w indeksie UNIQUE, , wartości kolumn muszą być niepowtarzalne w obrębie prefiksu.
Klucz podstawowy jest "specjalnym" kluczem niepowtarzalnym. Jest to w zasadzie unikalny klucz, z wyjątkiem tego, że służy do identyfikacji czegoś.
Instrukcja wyjaśnia, w jaki sposób ogólnie stosowane są indeksy: here.
W MSSQL pojęcia są podobne. Istnieją indeksy, unikalne ograniczenia i klucze podstawowe.
Nietestowane, ale uważam, że jest równoważny MSSQL:
CREATE TABLE tmp (
id int NOT NULL PRIMARY KEY IDENTITY,
uid varchar(255) NOT NULL CONSTRAINT uid_unique UNIQUE,
name varchar(255) NOT NULL,
tag int NOT NULL DEFAULT 0,
description varchar(255),
);
CREATE INDEX idx_name ON tmp (name);
CREATE INDEX idx_tag ON tmp (tag);
Edycja: Powyższy kod jest testowany za prawidłowe; jednak podejrzewam, że jest o wiele lepsza składnia do robienia tego. Minęło trochę czasu, odkąd użyłem serwera SQL i najwyraźniej trochę zapomniałem :).
related: [? KEY kluczowe MySQL] (http://stackoverflow.com/q/924265/697449) Zasadniczo 'KEY' jest synonimem' INDEX'. –