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

Er unikke indekser bedre til kolonnesøgeydelse? (PGSQL &MySQL)

Hvis dine data er unikke, bør du oprette en UNIQUE indeks over dem.

Dette indebærer ingen ekstra overhead og påvirker optimizerens beslutninger i visse tilfælde, så den kan vælge en bedre algoritme.

I SQL-server og i PostgreSQL , for eksempel hvis du sorterer på en UNIQUE tasten ignorerer optimeringsværktøjet ORDER BY klausuler brugt derefter (da de er irrelevante), dvs. e. denne forespørgsel:

SELECT  *
FROM    mytable
ORDER BY
        col_unique, other_col
LIMIT 10

vil bruge et indeks på col_unique og vil ikke sortere på other_col fordi det er ubrugeligt.

Denne forespørgsel:

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

vil også blive konverteret til en INNER JOIN (i modsætning til en SEMI JOIN ), hvis der er en UNIQUE indeks på othertable.othercol .

Et indeks indeholder altid en form for pointer til rækken (ctid i PostgreSQL , rækkemarkør i MyISAM , primær nøgle/uniquifier i InnoDB ) og bladene er ordnet på disse pegepinde, så faktisk er hvert indeksblad unikt på en eller anden måde (selvom det måske ikke er indlysende).

Se denne artikel i min blog for detaljer om ydeevne:



  1. vælg at opdatere med særskilt mysql

  2. MySQL datetime ikke returtid

  3. mysql:Hvordan kan jeg fjerne tegn ved starten eller slutningen af ​​feltet

  4. MySQL-pakke til python 3.7