Jika Anda membuat kunci primer komposit, pada (x, y, z)
, PostgreSQL mengimplementasikan ini dengan bantuan satu UNIQUE
indeks btree multi-kolom pada (x, y, z)
. Selain itu, ketiga kolom tersebut adalah NOT NULL
(secara implisit), yang merupakan perbedaan utama antara PRIMARY KEY
dan UNIQUE INDEX
.
Selain pembatasan yang jelas pada data Anda, indeks multi-kolom juga memiliki efek yang agak berbeda pada kinerja kueri daripada tiga indeks individu pada x
, y
dan z
.
Diskusi terkait di dba.SE:
- Kerja indeks di PostgreSQL
Dengan contoh, tolok ukur, diskusi, dan pandangan tentang fitur baru pemindaian hanya indeks di Postgres 9.2.
Secara khusus, kunci utama pada (x, y, z)
akan mempercepat kueri dengan ketentuan pada x
, (x,y)
atau (x,y,z)
secara optimal. Ini juga akan membantu dengan pertanyaan di y
, z
, (y,z)
atau (x,z)
tetapi pada tingkat yang jauh lebih rendah.
Jika Anda perlu mempercepat kueri pada kombinasi terakhir, Anda mungkin ingin mengubah urutan kolom dalam batasan PK Anda dan/atau membuat satu atau lebih indeks tambahan. Lihat:
- Apakah indeks komposit juga bagus untuk kueri di bidang pertama?