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: