sql >> Databáze >  >> RDS >> Mysql

Jsou jedinečné indexy lepší pro výkon vyhledávání sloupců? (PGSQL a MySQL)

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:



  1. Vyhněte se těmto 4 běžným chybám DBA

  2. jak získat data json z žádosti o příspěvek iphone

  3. MySQL :Vyberte záznamy s podmínkami, které platí pro více řádků

  4. MySQL používá názvy sloupců z jiné tabulky