Dan memasuki seni strategi tuning kinerja dan pengindeksan ...
Tampaknya logis bagi saya untuk mengubah definisi indeks yang ada untuk memasukkan kolom yang disarankan
Saya akan mengambil penawaran Anda dan menulis definisi indeks ketiga:
create index [idx_index3]
on [table1] (col1, col2, col3)
include (col4, col5, col6....);
Itu harus menjadi CREATE INDEX
pernyataan yang sesuai dengan pernyataan yang Anda kutip.
Itu mungkin solusi yang bijaksana, tapi itu tergantung . Berikut adalah beberapa contoh ketika saya mengatakan bahwa itu tergantung.
Jika Anda memiliki beban kerja umum yang sebagian besar terdiri dari kueri seperti ini:
select col1, col2, col3
from table1
where col1 = 1
and col2 = 2
and col3 = 3;
Maka idx_index1
indeks Anda akan solid. Sangat sempit, ini adalah indeks yang memenuhi kueri itu tanpa data asing di dalamnya (tidak memperhitungkan definisi indeks yang dikelompokkan, jika ada).
Tetapi jika Anda memiliki beban kerja yang terdiri dari kueri terutama seperti berikut ini:
select co11, col2, col3, col4, col5
from table1
where col1 = 1
and col2 = 2;
Maka idx_index2
akan lebih bijak, karena apa yang disebut indeks penutup mencegah kebutuhan untuk pencarian kunci kembali ke indeks berkerumun (atau pencarian RID kembali ke tumpukan). Definisi indeks yang tidak tercakup itu hanya akan mencakup semua data yang dibutuhkan kueri.
Dengan rekomendasi Anda, itu akan sangat cocok untuk permintaan seperti berikut:
select co11, col2, col3, col4, col5
from table1
where col1 = 1
and col2 = 2
and col3 = 3;
idx_index3
Rekomendasi Anda akan menjadi indeks penutup yang memenuhi kriteria pencarian untuk permintaan di atas.
Poin yang saya coba sampaikan, adalah dalam pertanyaan terisolasi seperti ini kita tidak bisa menjawab ini secara definitif. Itu semua tergantung pada apa beban kerja umum dan sering. Tentu saja Anda selalu dapat menentukan ketiga indeks ini untuk menangani setiap jenis kueri sampel, tetapi kemudian mempertanyakan pemeliharaan yang akan diperlukan untuk menjaga agar indeks ini diperbarui (pikirkan: INSERT, UPDATE, HAPUS). Itulah overhead indeks.
Anda perlu membedah dan mengevaluasi beban kerja, dan menentukan di mana keunggulan akan terbaik. Jika kueri sampel pertama adalah yang paling umum sejauh ini dieksekusi puluhan kali per detik, dan ada kueri yang sangat jarang seperti kueri sampel ketiga, maka tidak masuk akal untuk mengasapi halaman level daun indeks dengan INCLUDE
kolom bukan kunci. Itu semua tergantung pada beban kerja Anda.
Jika Anda memahami strategi pengindeksan yang bijaksana, dan Anda memahami beban kerja Anda yang umum, maka dengan menerapkan keduanya, Anda akan dapat menemukan apa rute terbaik yang harus diambil.