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: