Pengindeksan berkelompok sekarang harus - mengapa?


9

Sebelumnya, ada non-konklusif untuk saya debat / diskusi tentang apakah (selalu) terlibat / menghindari indeks berkerumun.

Yah, saya mengerti bahwa mereka harus digunakan kadang-kadang dengan tujuan dan konteks spesifik + yang tepat.

Persyaratan Indeks Clustered Database SQL Azure :

"SQL Azure tidak mendukung tabel tanpa indeks berkerumun. Sebuah tabel harus memiliki indeks berkerumun. Jika sebuah tabel dibuat tanpa kendala berkerumun, indeks berkerumun harus dibuat sebelum operasi penyisipan diizinkan pada tabel"

tidak cocok dengan kesimpulan, alasan, dan penjelasan sebelumnya.

Apa alasannya, yang telah saya lewatkan dari penjelasan sebelumnya, tentang penerapan indeks kluster di mana-mana tanpa pengecualian?


4
SQL Azure berbeda dari SQL Server seperti yang Anda ketahui. Azure adalah database terdistribusi, menyimpan data Anda di lebih dari satu mesin fisik. Itu sebabnya.

1
Perhatikan bahwa di v12 dari Layanan Database Azure SQL, Anda mungkin memiliki tabel tanpa indeks berkerumun.
Troy Hunt

Jawaban:


11

Baca Di Dalam SQL Azure :

SQL Azure menyediakan basis data logis untuk penyimpanan data aplikasi. Pada kenyataannya, setiap data pelanggan sebenarnya disimpan beberapa kali, direplikasi di tiga basis data SQL Server yang didistribusikan di tiga server fisik dalam satu pusat data tunggal. Banyak pelanggan dapat berbagi database fisik yang sama.

Diperlukan kunci Clustered sehingga tiga replika data Anda dapat disimpan dalam sinkronisasi. Tanpa kunci, mustahil untuk mengetahui baris mana yang diperbarui. Tumpukan (tabel tanpa indeks berkerumun) hanya memiliki 'kunci' fisik (fileid: pageid: slot) dan karena 3 replika dari basis data logis Anda berbagi basis data fisik dengan basis data logis lainnya, alamat fisik pada satu server tidak memiliki arti di sisi lain replika, maka tumpukan tidak mungkin direplikasi.


Kunci (logis) tidak harus berada di indeks berkerumun. Ini bisa menjadi nonclustered. Mungkin alasan sebenarnya mengapa indeks cluster (mungkin unik?) Diperlukan adalah bahwa tumpukan menggunakan RID sedangkan indeks cluster unik tidak. Apakah itu yang kamu maksud?
nvogel

3
Dari dokumen tertaut: "Ketersediaan tinggi dan teknologi replikasi dalam SQL Azure didasarkan pada mereplikasi baris B-Tree.". Jadi, bahkan jika tumpukan akan memiliki kunci NC, Anda hanya bisa meniru NC, tetapi bukan tumpukan itu sendiri.
Remus Rusanu


1

Azure adalah sistem terdistribusi, berbasis cloud di server jauh. Data kemungkinan akan disimpan pada banyak drive / server, dan akan sangat tidak efisien untuk melakukan ini pada heap (karena sistem perlu mengetahui mesin mana yang akan diperiksa, dan tanpa indeks berkerumun ini adalah operasi intensif sumber daya) .

Indeks berkerumun menyediakan pencarian untuk semua baris dan semua indeks lainnya di atas meja, jadi tanpa satu setiap operasi di biru akan menjadi pemindaian tabel di beberapa mesin.


2
Itu mungkin benar, tetapi saat ini tidak. Baca artikel yang saya tautkan, ini menjelaskan cara kerja perutean permintaan dan mengapa permintaan Anda selalu berjalan pada satu kotak tunggal dan tidak pernah menjangkau beberapa server. Yaitu. tidak ada pecahan.
Remus Rusanu
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.