Saya ingin menambahkan di sini bahwa basis data yang berbeda memerlukan strategi yang berbeda. Mari kita bandingkan MySQL w / InnoDB dan PostgreSQL sebagai contoh.
InnoDB
Tabel InnoDB pada dasarnya adalah indeks b-tree dari kunci utama yang diperluas untuk memasukkan informasi baris dalam entri indeks. Pemindaian urutan fisik tidak didukung dan semua pemindaian terjadi dalam urutan logis. Ini berarti dua hal:
Pemindaian berurutan di Innodb menghasilkan banyak I / O disk acak , dan
Indeks kunci utama harus dilalui terlepas dari apakah seseorang menggunakan indeks sekunder.
Pencarian kunci primer lebih cepat dalam model ini daripada dalam pendekatan lainnya.
Dalam hal ini sangat penting untuk mengindeks bidang yang cukup dalam tabel multi-halaman. Aturan umumnya adalah indeks semua yang ingin Anda filter.
PostgreSQL
PostgreSQL menggunakan file tumpukan, satu tabel per file (beberapa tabel mungkin banyak file) di mana tupel dialokasikan dari ruang kosong tumpukan itu. Pemindaian urutan fisik didukung. Agar pemindaian urutan logis berfungsi, indeks harus ditambahkan.
Kunci primer di PostgreSQL pada dasarnya adalah bagian dari indeks unik di mana tidak ada nilai yang NULL. Kendala UNIK dilakukan dengan menggunakan indeks implisit, dan beberapa jenis indeks lainnya didukung dengan operasi yang berbeda yang mungkin dalam indeks.
Ini berarti:
Pencarian kunci primer, dengan asumsi tablerequire cukup besar memukul file indeks dan file tabel. Ini secara signifikan lebih lambat daripada pendekatan MySQL di mana indeks hanya harus dilalui dan baris terkandung dalam indeks.
Pemindaian urutan fisik berkinerja lebih baik, mengurangi I / O disk acak tempat sejumlah besar baris akan diproses.
Pemindaian indeks sekunder berkinerja lebih baik daripada MySQL karena hanya satu indeks yang harus dilalui untuk sampai ke bagian fisik tabel.
Dalam model ini, indeks sering diperlukan tetapi perencana memiliki lebih banyak kebebasan kapan harus menggunakan indeks, dan implikasi dari tidak menggunakan satu indeks seringkali kurang parah. Tabel lebih umum dioptimalkan (daripada mengkhususkan diri dalam pencarian pkey) dan indeks lebih sedikit diperlukan.
TL; DR
Ketahui RDBMS-mu.