Bila Anda menginginkan kecepatan pengambilan maksimum dan memiliki kedua kolom dalam kondisi join atau where, NAMUN terkadang kolom a memiliki selektivitas yang lebih tinggi dan terkadang kolom b memiliki selektivitas yang lebih tinggi, dan Anda ingin memanfaatkan fakta tersebut dari indeks tunggal.
Juga saya pikir rasio ukuran data / kinerja mesin Anda harus cukup tinggi dan pada saat yang sama Anda harus (menebak) bersedia untuk menyebut peningkatan apa pun sebagai kebutuhan (walaupun hanya dengan beberapa persentase).
Namun, pengalaman mengajarkan bahwa banyak hal bergantung pada banyak faktor; dengan RDBMS dan lingkungan aplikasi tertentu, Anda sebaiknya menjalankan tolok ukur Anda sendiri.
EDIT:Penjelasan lebih lanjut tentang indeks komposit.dari wikipedia
:
"Urutan kolom yang dicantumkan dalam definisi indeks adalah penting. Hal ini dimungkinkan untuk mengambil satu set pengidentifikasi baris hanya menggunakan kolom pertama yang diindeks. Namun, itu tidak mungkin atau efisien (pada sebagian besar basis data) untuk mengambil kumpulan pengidentifikasi baris hanya dengan menggunakan kolom terindeks kedua atau lebih besar.
Misalnya, bayangkan sebuah buku telepon yang disusun berdasarkan kota terlebih dahulu, kemudian nama belakang, dan kemudian nama depan. Jika Anda diberikan kota, Anda dapat dengan mudah mengekstrak daftar semua nomor telepon untuk kota itu. Namun, dalam buku telepon ini akan sangat membosankan untuk menemukan semua nomor telepon untuk nama belakang yang diberikan. Anda harus mencari di dalam masing-masing kota bagian untuk entri dengan nama belakang itu."
Penjelasan Wikipedia mungkin terlalu disederhanakan, tetapi ini memberi Anda ide dasar (sebagai analogi perlu diingat bahwa buku telepon biasanya memiliki indeks berkerumun dan itu tidak akan menjadi indeks basis data umum Anda).
Bergantung pada ukuran indeks vs ukuran struktur data vs memori yang tersedia vs selektivitas pada kolom pertama indeks, mungkin masih jauh lebih murah untuk menggunakan indeks yang diurutkan secara salah daripada menggunakan pemindaian tabel.
Ah, baru saja memikirkan analogi yang lebih baik dengan contoh yang Anda cari Bayangkan sebuah buku teks yang bagus, itu akan memiliki daftar isi dengan bab dan subbab dan jumlah halaman di mana mereka berada (yang merupakan indeks non-berkelompok yang menyimpan pointer ke catatan data - halaman). Sekarang bayangkan bahwa buku teks menggunakan standar SQL-92, maka sebagian besar istilah dalam TOC akan menjadi istilah SQL (pegang asumsi ini). Anda juga akan memiliki indeks lain di akhir buku yang akan daftar semua istilah yang menarik dalam urutan abjad (mari kita asumsikan dengan nama bab utama) dan nomor halaman.
Untuk pertanyaan seperti 'Beri tahu saya semua bab di mana DISTINCT muncul' Anda akan menggunakan indeks kedua. (karena selektivitas bidang selanjutnya tinggi)
Untuk pertanyaan seperti 'Beri tahu saya jumlah istilah yang muncul di bawah bab pertama' Anda akan menggunakan TOC
Jadi untuk pertanyaan seperti 'Apakah SELECT dijelaskan di bawah bab DML?' Anda dapat menggunakan salah satu dari indeks. (karena selektivitas kedua bidang tinggi) Namun jika TOC dari DML itu sendiri adalah 3 halaman dan entri SELECT dalam indeks hanya memiliki lima belas baris, Anda mungkin akan pergi ke yang kedua, dan itu adalah contoh saat Anda mendapat manfaat dari kedua indeks.
Sekarang, jika menurut Anda itu terlalu berlebihan, pertimbangkan database perpustakaan kongres yang dipindai. :)
Seperti yang saya katakan sebelumnya, semua perencanaan baik-baik saja, tetapi pada akhirnya jalankan tolok ukur Anda sendiri.