Pokud jsou vaše data jedinečná, měli byste vytvořit UNIQUE index na nich.
To neznamená žádnou další režii a v určitých případech to ovlivňuje rozhodnutí optimalizátoru, aby mohl zvolit lepší algoritmus.
V SQL Server a v PostgreSQL , například pokud třídíte podle UNIQUE klíč, optimalizátor ignoruje ORDER BY doložky použité poté (protože jsou irelevantní), tzn. E. tento dotaz:
SELECT *
FROM mytable
ORDER BY
col_unique, other_col
LIMIT 10
použije index na col_unique a nebude řadit podle other_col protože je to zbytečné.
Tento dotaz:
SELECT *
FROM mytable
WHERE mycol IN
(
SELECT othercol
FROM othertable
)
bude také převeden na INNER JOIN (na rozdíl od SEMI JOIN ), pokud existuje UNIQUE index na othertable.othercol .
Index vždy obsahuje nějaký druh ukazatele na řádek (ctid v PostgreSQL , ukazatel řádku v MyISAM , primární klíč/uniquiifier v InnoDB ) a listy jsou seřazeny podle těchto ukazatelů, takže ve skutečnosti je každý indexový list svým způsobem jedinečný (i když to nemusí být zřejmé).
Podrobnosti o výkonu naleznete v tomto článku na mém blogu: