Mysql
 sql >> Database >  >> RDS >> Mysql

Gli indici univoci sono migliori per le prestazioni di ricerca delle colonne? (PGSQL e MySQL)

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: