Mysql
 sql >> Base de données >  >> RDS >> Mysql

Les index uniques sont-ils meilleurs pour les performances de recherche de colonne ? (PGSQL et MySQL)

Si vos données sont uniques, vous devez créer un UNIQUE indexez-les.

Cela n'implique aucune surcharge supplémentaire et affecte les décisions de l'optimiseur dans certains cas afin qu'il puisse choisir un meilleur algorithme.

Dans SQL Server et dans PostgreSQL , par exemple, si vous triez sur un UNIQUE clé, l'optimiseur ignore le ORDER BY les clauses utilisées par la suite (puisqu'elles ne sont pas pertinentes), i. e. cette requête :

SELECT  *
FROM    mytable
ORDER BY
        col_unique, other_col
LIMIT 10

utilisera un index sur col_unique et ne triera pas sur other_col parce que c'est inutile.

Cette requête :

SELECT  *
FROM    mytable
WHERE   mycol IN
        (
        SELECT  othercol
        FROM    othertable
        )

sera également converti en un INNER JOIN (par opposition à un SEMI JOIN ) s'il y a un UNIQUE index sur othertable.othercol .

Un index contient toujours une sorte de pointeur vers la ligne (ctid dans PostgreSQL , pointeur de ligne dans MyISAM , clé primaire/uniquificateur dans InnoDB ) et les feuilles sont ordonnées sur ces pointeurs, donc en fait chaque feuille d'index est unique d'une certaine manière (bien que ce ne soit pas évident).

Consultez cet article sur mon blog pour plus de détails sur les performances :