Si sus datos son únicos, debe crear un UNIQUE
índice sobre ellos.
Esto no implica una sobrecarga adicional y afecta las decisiones del optimizador en ciertos casos para que pueda elegir un mejor algoritmo.
En SQL Server
y en PostgreSQL
, por ejemplo, si ordena en un UNIQUE
clave, el optimizador ignora el ORDER BY
cláusulas utilizadas después de eso (ya que son irrelevantes), i. mi. esta consulta:
SELECT *
FROM mytable
ORDER BY
col_unique, other_col
LIMIT 10
utilizará un índice en col_unique
y no ordenará en other_col
porque es inútil.
Esta consulta:
SELECT *
FROM mytable
WHERE mycol IN
(
SELECT othercol
FROM othertable
)
también se convertirá en un INNER JOIN
(a diferencia de un SEMI JOIN
) si hay un UNIQUE
índice en othertable.othercol
.
Un índice siempre contiene algún tipo de puntero a la fila (ctid
en PostgreSQL
, puntero de fila en MyISAM
, clave principal/uniquificador en InnoDB
) y las hojas están ordenadas en estos punteros, por lo que, de hecho, cada hoja de índice es única de alguna manera (aunque puede que no sea obvio).
Consulte este artículo en mi blog para obtener detalles sobre el rendimiento: