Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Sind eindeutige Indizes besser für die Spaltensuchleistung? (PGSQL und MySQL)

Wenn Ihre Daten einzigartig sind, sollten Sie einen UNIQUE erstellen Index darauf.

Dies bedeutet keinen zusätzlichen Aufwand und wirkt sich in bestimmten Fällen auf die Entscheidungen des Optimierers aus, sodass er einen besseren Algorithmus auswählen kann.

In SQL-Server und in PostgreSQL , zum Beispiel, wenn Sie nach einem UNIQUE sortieren Schlüssel, ignoriert der Optimierer den ORDER BY Klauseln, die danach verwendet werden (da sie irrelevant sind), d. e. diese Abfrage:

SELECT  *
FROM    mytable
ORDER BY
        col_unique, other_col
LIMIT 10

verwendet einen Index auf col_unique und wird nicht nach other_col sortiert weil es nutzlos ist.

Diese Abfrage:

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

wird ebenfalls in einen INNER JOIN umgewandelt (im Gegensatz zu einem SEMI JOIN ), wenn es einen UNIQUE gibt Index auf othertable.othercol .

Ein Index enthält immer eine Art Zeiger auf die Zeile (ctid in PostgreSQL , Zeilenzeiger in MyISAM , Primärschlüssel/Uniquifier in InnoDB ) und die Blätter sind nach diesen Zeigern geordnet, sodass tatsächlich jedes Indexblatt auf irgendeine Weise einzigartig ist (obwohl es möglicherweise nicht offensichtlich ist).

Einzelheiten zur Leistung finden Sie in diesem Artikel in meinem Blog: