sql >> Database >  >> RDS >> Mysql

Zijn unieke indexen beter voor de zoekprestaties van kolommen? (PGSQL &MySQL)

Als uw gegevens uniek zijn, moet u een UNIQUE . maken index op hen.

Dit houdt geen extra overhead in en beïnvloedt in bepaalde gevallen de beslissingen van de optimizer, zodat deze een beter algoritme kan kiezen.

In SQL Server en in PostgreSQL , bijvoorbeeld als u sorteert op een UNIQUE sleutel, negeert de optimizer de ORDER BY clausules die daarna worden gebruikt (omdat ze niet relevant zijn), i. e. deze vraag:

SELECT  *
FROM    mytable
ORDER BY
        col_unique, other_col
LIMIT 10

zal een index gebruiken op col_unique en zal niet sorteren op other_col omdat het nutteloos is.

Deze vraag:

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

wordt ook omgezet in een INNER JOIN (in tegenstelling tot een SEMI JOIN ) als er een UNIQUE . is index op othertable.othercol .

Een index bevat altijd een soort aanwijzer naar de rij (ctid in PostgreSQL , rijaanwijzer in MyISAM , primaire sleutel/uniquifier in InnoDB ) en de bladeren zijn geordend op deze wijzers, dus in feite is elk indexblad op de een of andere manier uniek (hoewel het misschien niet duidelijk is).

Zie dit artikel in mijn blog voor prestatiedetails:



  1. Hoe dubbele rijen te veranderen in unieke waarden in mysql?

  2. Tekencoderingsprobleem

  3. MySQL-databases maken en onderhouden in cPanel

  4. Hoe cbrt() werkt in PostgreSQL