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: