Jeśli Twoje dane są unikalne, powinieneś utworzyć UNIKALNY indeksuj je.
Nie oznacza to żadnych dodatkowych narzutów i wpływa na decyzje optymalizatora w niektórych przypadkach, dzięki czemu może on wybrać lepszy algorytm.
W SQL Server oraz w PostgreSQL , na przykład, jeśli sortujesz według UNIKALNEGO klucz, optymalizator ignoruje ORDER BY klauzule użyte po tym (ponieważ są nieistotne), ja. mi. to zapytanie:
SELECT *
FROM mytable
ORDER BY
col_unique, other_col
LIMIT 10
użyje indeksu na col_unique i nie będzie sortować według other_col ponieważ jest bezużyteczny.
To zapytanie:
SELECT *
FROM mytable
WHERE mycol IN
(
SELECT othercol
FROM othertable
)
zostanie również przekonwertowany na INNER JOIN (w przeciwieństwie do SEMI JOIN ) jeśli istnieje UNIKALNY indeks na othertable.othercol .
Indeks zawsze zawiera jakiś wskaźnik do wiersza (ctid w PostgreSQL , wskaźnik wiersza w MyISAM , klucz podstawowy/unikyfikator w InnoDB ), a liście są uporządkowane według tych wskaźników, więc w rzeczywistości każdy liść indeksu jest w jakiś sposób unikalny (choć może to nie być oczywiste).
Zobacz ten artykuł na moim blogu, aby uzyskać szczegółowe informacje na temat wydajności: