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: