Hvis dine data er unikke, bør du oprette en UNIQUE
indeks over dem.
Dette indebærer ingen ekstra overhead og påvirker optimizerens beslutninger i visse tilfælde, så den kan vælge en bedre algoritme.
I SQL-server
og i PostgreSQL
, for eksempel hvis du sorterer på en UNIQUE
tasten ignorerer optimeringsværktøjet ORDER BY
klausuler brugt derefter (da de er irrelevante), dvs. e. denne forespørgsel:
SELECT *
FROM mytable
ORDER BY
col_unique, other_col
LIMIT 10
vil bruge et indeks på col_unique
og vil ikke sortere på other_col
fordi det er ubrugeligt.
Denne forespørgsel:
SELECT *
FROM mytable
WHERE mycol IN
(
SELECT othercol
FROM othertable
)
vil også blive konverteret til en INNER JOIN
(i modsætning til en SEMI JOIN
), hvis der er en UNIQUE
indeks på othertable.othercol
.
Et indeks indeholder altid en form for pointer til rækken (ctid
i PostgreSQL
, rækkemarkør i MyISAM
, primær nøgle/uniquifier i InnoDB
) og bladene er ordnet på disse pegepinde, så faktisk er hvert indeksblad unikt på en eller anden måde (selvom det måske ikke er indlysende).
Se denne artikel i min blog for detaljer om ydeevne: