Se i tuoi dati sono univoci, dovresti creare un UNIQUE indice su di essi.
Ciò non implica alcun sovraccarico aggiuntivo e in alcuni casi influisce sulle decisioni dell'ottimizzatore in modo che possa scegliere un algoritmo migliore.
In SQL Server e in PostgreSQL , ad esempio, se ordini su un UNIQUE chiave, l'ottimizzatore ignora il ORDER BY clausole utilizzate successivamente (poiché irrilevanti), i. e. questa domanda:
SELECT *
FROM mytable
ORDER BY
col_unique, other_col
LIMIT 10
utilizzerà un indice su col_unique e non ordinerà su other_col perché è inutile.
Questa domanda:
SELECT *
FROM mytable
WHERE mycol IN
(
SELECT othercol
FROM othertable
)
verrà anche convertito in un INNER JOIN (al contrario di un SEMI JOIN ) se è presente un UNIQUE indice su othertable.othercol .
Un indice contiene sempre una sorta di puntatore alla riga (ctid in PostgreSQL , puntatore di riga in MyISAM , chiave primaria/unificatore in InnoDB ) e le foglie sono ordinate su questi puntatori, quindi in effetti ogni foglia dell'indice è unica in qualche modo (anche se potrebbe non essere ovvio).
Vedi questo articolo nel mio blog per i dettagli sulle prestazioni: