Perbedaan antara pencarian indeks cluster dan pencarian indeks non clustered

10

Apa perbedaan antara pencarian Indeks Clustered (CI) dan Non Indeks Clustered (NCI)? Apakah yang satu berkinerja lebih baik daripada yang lain?

Alasan saya menanyakan hal ini adalah karena saya memiliki meja dengan 50 juta baris dan 150 kolom. Itu memiliki kolom bernama IDdidefinisikan sebagai indeks berkerumun. Ada satu lagi NCI di atasnya dengan ID kunci indeks yang sama dan includekolom tujuh- d. Sepertinya saya bahwa indeks NC adalah duplikat di sini dan dapat dengan aman dijatuhkan.

Jadi saya ingin beberapa pendapat ahli / saran jika dapat dijatuhkan dengan aman atau harus tetap utuh?

SQLPRODDBA
sumber
Apakah Anda mengatakan bahwa SEMUA kolom disertakan pada indeks tidak berkerumun?
Ian Ringrose
Tidak. Tabel ini memiliki 150 kolom di dalamnya dengan kolom ID yang didefinisikan sebagai CI dan memiliki indeks NCI dengan lagi kolom ID sebagai kunci indeks dan 7 kolom lainnya di sertakan.
SQLPRODDBA
Kemudian Paul White tampaknya telah memberikan jawaban yang benar, namun saya mempertanyakan apakah Anda harus mengubah tabel "dasar" dari tabel berkerumun menjadi tumpukan. Atau bahkan membagi tabel tergantung pada seberapa sering kolom yang berbeda diperbarui, sehingga dapat mengurangi biaya pencatatan transaksi.
Ian Ringrose

Jawaban:

26

Indeks nonclustered yang memiliki kunci yang sama * sebagai indeks berkerumun, mungkin masih berguna, karena indeks nonclustered biasanya akan lebih kecil dan lebih padat. Ingat, indeks berkerumun mencakup semua data dalam baris, sehingga biasanya merupakan indeks terluas (paling tidak padat).

* Kolom kunci yang sama, dalam urutan yang sama, diurutkan dengan cara yang sama (asc / desc).

Untuk pencarian tunggal (pencarian menggunakan predikat kesetaraan ke dalam indeks yang unik), perbedaan utama adalah peluang yang dianggap lebih besar dari halaman indeks yang diperlukan untuk menemukan bahwa rekaman tunggal sudah ada dalam memori. Semua hal sama, indeks nonclustered dengan 100 halaman memiliki peluang lebih baik daripada indeks cluster yang disimpan pada 10.000 halaman.

Untuk jenis pencarian lain apa pun kecuali singleton, akan ada komponen pemindaian juga. Bagian pemindaian juga akan mendapat manfaat dari kepadatan indeks nonclustered yang lebih besar (lebih banyak baris per halaman). Bahkan jika halaman-halaman tersebut harus berasal dari penyimpanan yang persisten, membaca lebih sedikit halaman lebih cepat.

Anda harus memeriksa dokumentasi sistem, meminta orang yang menambahkan indeks, dan / atau mencari komentar kode untuk memahami mengapa indeks ini ada. Anda juga perlu memeriksa definisi indeks lengkap dengan cermat, termasuk kompresi, dan melihat skrip pemeliharaan indeks. Mungkin ada alasan khusus lainnya untuk memiliki indeks yang tidak tercakup (mis. Kemampuan untuk membangun kembali secara online).

Paul White 9
sumber