sql >> Base de Datos >  >> RDS >> Mysql

¿Los índices únicos son mejores para el rendimiento de búsqueda de columnas? (PGSQL y MySQL)

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: