Se seus dados são únicos, você deve criar um
UNIQUE
índice neles. Isso não implica em sobrecarga adicional e afeta as decisões do otimizador em certos casos para que ele possa escolher um algoritmo melhor.
Em
SQL Server
e em PostgreSQL
, por exemplo, se você classificar em um UNIQUE
chave, o otimizador ignora o ORDER BY
cláusulas usadas depois disso (já que são irrelevantes), i. e. esta consulta:SELECT *
FROM mytable
ORDER BY
col_unique, other_col
LIMIT 10
usará um índice em
col_unique
e não classificará em other_col
porque é inútil. Esta consulta:
SELECT *
FROM mytable
WHERE mycol IN
(
SELECT othercol
FROM othertable
)
também será convertido em um
INNER JOIN
(em oposição a um SEMI JOIN
) se houver um UNIQUE
indexar em othertable.othercol
. Um índice sempre contém algum tipo de ponteiro para a linha (
ctid
em PostgreSQL
, ponteiro de linha em MyISAM
, chave primária/uniquifier em InnoDB
) e as folhas são ordenadas nesses ponteiros, portanto, na verdade, cada folha de índice é única (embora possa não ser óbvia). Veja este artigo no meu blog para obter detalhes de desempenho: