Batas tepat sangat sulit untuk ditentukan sebelumnya.
Satu hal yang diremehkan kebanyakan orang adalah persyaratan tinggi yang harus dipenuhi indeks, sebelum menjadi kandidat untuk digunakan dalam kueri.
Indeks yang efisien (tidak tercakup)
menawarkan selektivitas yang baik , misalnya mengembalikan hanya persentase yang sangat kecil (<1%, <2%) dari total baris. Jika selektivitas tidak diberikan - pengoptimal permintaan SQL Server kemungkinan besar akan mengabaikan indeks ini
idealnya harus mencakup permintaan, yaitu mengembalikan semua kolom yang diperlukan oleh permintaan. Jika Anda dapat membuat indeks yang memiliki 1 atau 2 kolom indeks, dan menyertakan beberapa kolom lainnya (2-4) sebagai kolom yang disertakan dan dengan demikian Anda dapat menutup kueri - maka kemungkinan pengoptimal kueri akan menggunakan indeks ini. Yang juga berarti: jika kode Anda selalu digunakan SELECT * .....untuk mengambil semua kolom , kemungkinan indeks yang digunakan turun - cukup dramatis, sebenarnya
Saya yakin ada banyak kriteria lain juga - tetapi saya percaya kedua kriteria ini adalah yang paling kritis. Tentu saja, Anda harus selalu menjaga indeks Anda terjaga dengan baik (mengatur ulang, membangun kembali) dan memastikan statistik yang terkait dengan indeks Anda tetap terbaru.
PS: indeks nonclustered pada kolom kunci asing adalah kasus khusus; secara default, saya selalu merekomendasikan untuk menambahkannya, karena mereka membantu mempercepat kedua pemeriksaan integritas referensial, dan juga JOINpada kendala FK tersebut. Tetapi bahkan di sini, itu benar-benar valid untuk "memperluas" indeks kolom FK dengan menambahkan beberapa kolom "termasuk" tambahan untuk membuatnya lebih berguna.