Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Os índices exclusivos são melhores para o desempenho da pesquisa de coluna? (PGSQL e MySQL)


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: