Jika data Anda unik, Anda harus membuat UNIQUE indeks pada mereka.
Ini menyiratkan tidak ada overhead tambahan dan memengaruhi keputusan pengoptimal dalam kasus tertentu sehingga dapat memilih algoritme yang lebih baik.
Di SQL Server dan di PostgreSQL , misalnya, jika Anda mengurutkan pada UNIQUE kunci, pengoptimal mengabaikan ORDER BY klausa yang digunakan setelah itu (karena tidak relevan), i. e. pertanyaan ini:
SELECT *
FROM mytable
ORDER BY
col_unique, other_col
LIMIT 10
akan menggunakan indeks pada col_unique dan tidak akan mengurutkan other_col karena tidak ada gunanya.
Kueri ini:
SELECT *
FROM mytable
WHERE mycol IN
(
SELECT othercol
FROM othertable
)
juga akan diubah menjadi INNER JOIN (sebagai lawan dari SEMI JOIN ) jika ada UNIQUE indeks pada othertable.othercol .
Indeks selalu berisi semacam penunjuk ke baris (ctid di PostgreSQL , penunjuk baris di MyISAM , kunci utama/uniquifier di InnoDB ) dan daun diurutkan pada penunjuk ini, jadi sebenarnya setiap daun indeks adalah unik dalam beberapa hal (meskipun mungkin tidak jelas).
Lihat artikel ini di blog saya untuk detail kinerja: