Apa itu Indeks Clustered?

15

Saya perlu penjelasan singkat tentang indeks berkerumun.

  • Apa itu indeks berkerumun?
  • Apa praktik terbaik untuk menggunakan indeks berkerumun?
Amir Rezaei
sumber
Sebaiknya gunakan tanggal dalam indeks berkerumun karena data baru selalu ditambahkan di akhir tabel.
Ralph Winters
1
Mungkin saja, tetapi tidak selalu.
mrdenny
@ Mrdenny - dapatkah Anda menjelaskan kapan ini tidak terjadi?
Ralph Winters
1
Jika baris sedang dimasukkan rusak. Jika tabel lebih biasanya akan ditanyakan oleh kunci primer. Jika kunci utama adalah INT (atau lebih kecil) dan akan ada banyak indeks non-clustered di atas tabel daripada kunci clustered datetime akan lebih besar dan kurang efisien. Jika tabel tidak akan pernah ditanyai oleh kolom tanggal daripada menggunakan adalah sebagai kunci clustering tidak akan bermanfaat karena hanya indeks non-clustered akan digunakan.
mrdenny
@ Mrdenny: juga jika tabel tidak memiliki kolom tanggal (kasus subset dari yang terakhir Anda :)
ypercube

Jawaban:

15

Secara sederhana ...

Direktori telepon: data adalah indeks / indeks adalah data. Untuk melihat Anda, saya akan mulai dengan Rezaei, Amir misalnya. Tidak diperlukan pencarian eksternal.

Dalam istilah basis data:

Tabel data dan indeks berkerumun adalah satu dan sama (dalam SQL Server, juga InnoDB, Oracle IOT)

Praktik terbaik adalah sempit, numerik, benar-benar meningkat (pikirkan IDENTITY atau kolom Autonumber). Tipe data seperti GUID bukan ide yang baik

Tautan untuk membaca (untuk menghindari kembungnya jawaban ini)

Sunting, untuk sepenuhnya menjelaskan saran praktik terbaik saya, ikuti tautan dalam komentar Eric Humphrey: Queen of Indexing: Kimberly Tripp

gbn
sumber
3
Anda juga akan menginginkan blog Kimberly Tripp: sqlskills.com/BLOGS/KIMBERLY/category/Clustered-Index.aspx
Eric Humphrey - lotsahelp
1
Dan di situlah letak masalahnya dengan menerapkan "praktik terbaik" tanpa konteks. Misalnya, jika kriteria pencarian utama untuk tabel besar yang sering dicari adalah rentang tanggal, lokasi terbaik Anda untuk indeks berkerumun adalah tanggal yang dicari BUKAN kunci utama. Untuk mengatakan tabel dan indeks berkerumun adalah satu dan yang sama agak terlalu sederhana. Data sebenarnya disimpan dalam urutan yang ditentukan oleh indeks berkerumun. Antara lain, ini berarti bahwa indeks berkerumun sangat berguna untuk pencarian rentang mengembalikan set data lengkap.
Russell Steen
2
@Russell Steen: 1. Saya menyertakan tautan 2. OP harus bertanya, mempertimbangkan level apa yang saya berikan jawaban ini pada 3. Eric Humphrey menyediakan tautan buat. Kita dapat melewati kasus per kasus apa yang diketahui dan dipahami oleh orang yang lebih berpengalaman, tetapi apakah kita di sini untuk membantu mendidik atau membanjiri ...?
gbn
Saya mendengar apa yang Anda katakan. Masalahnya bukan dengan jawaban Anda sendiri, tetapi pada kenyataan bahwa orang-orang yang kurang berpengalaman daripada Anda berkeliaran mengutip dan menerapkan sesuatu karena itu adalah "praktik terbaik" tanpa memahami penggunaan dan konteks praktik terbaik yang ditulis untuk - saya akan berargumen bahwa ya, kami di sini untuk mendidik dan mengutip praktik terbaik tanpa memberikan lebih banyak konteks secara langsung di pos tidak melakukan pekerjaan sebaik itu.
Russell Steen
2
Oh, perhatikan saja labelnya SQL-Server, abaikan.
ypercubeᵀᴹ
3

Merupakan indeks pada data itu sendiri sehingga catatan secara fisik diurutkan berdasarkan bidang Anda memiliki indeks berkerumun. Inilah sebabnya mengapa Anda hanya dapat memiliki satu Indeks Berkelompok per tabel.

Indeks Non Clustered tidak secepat pencarian, tetapi Anda dapat memiliki banyak jenis indeks di atas meja.

kacalapy
sumber
3
Indeks non-cluster dapat sama efisiennya untuk pencarian, jika indeks non-cluster mencakup untuk pencarian yang dimaksud.
Russell Steen
@Russell Tidak mungkin ini bisa lebih cepat karena indeks telah memaksa urutan data yang sebenarnya. Tidak ada cara yang lebih sederhana / lebih cepat untuk SQL atau RDBMS untuk menemukan informasi yang dibutuhkan.
kacalapy
4
Saya tidak mengatakan lebih cepat. Indeks penutup memiliki semua data yang diminta dalam pilih di indeks - DALAM PESANAN, pada lokasi terpisah pada disk. Jadi pilih terhadap indeks penutup yang cocok tidak pernah menyentuh tabel.
Russell Steen
2
NCI yang mencakup kemungkinan akan lebih kecil yang berarti lebih sedikit halaman untuk dibaca dan lebih cepat.
Martin Smith
Alasan hanya memiliki satu indeks Clustered di atas meja bukanlah pengurutan fisik, halaman indeks selalu diurutkan secara logis, dan alokasi halaman yang berdekatan tidak dijamin. Anda hanya dapat memiliki satu Indeks Clustered per tabel karena Indeks Clustered adalah tabel itu sendiri, dan indeks Non-Clustered adalah salinan tabel dengan kolom yang diperlukan.
Manoj Pandey