Om din data är unik bör du skapa en UNIQUE
index på dem.
Detta innebär ingen extra omkostnad och påverkar optimerarens beslut i vissa fall så att den kan välja en bättre algoritm.
I SQL Server
och i PostgreSQL
, till exempel om du sorterar på en UNIQUE
nyckel ignorerar optimeraren ORDER BY
klausuler som används efter det (eftersom de är irrelevanta), dvs. e. denna fråga:
SELECT *
FROM mytable
ORDER BY
col_unique, other_col
LIMIT 10
kommer att använda ett index på col_unique
och sorterar inte på other_col
eftersom det är värdelöst.
Denna fråga:
SELECT *
FROM mytable
WHERE mycol IN
(
SELECT othercol
FROM othertable
)
kommer också att konverteras till en INNER JOIN
(i motsats till en SEMI JOIN
) om det finns en UNIQUE
index på othertable.othercol
.
Ett index innehåller alltid någon form av en pekare till raden (ctid
i PostgreSQL
, radpekare i MyISAM
, primärnyckel/uniquiifier i InnoDB
) och bladen är ordnade på dessa pekare, så i själva verket är varje indexblad unikt på något sätt (även om det kanske inte är uppenbart).
Se den här artikeln i min blogg för information om prestanda: