Pertimbangkan indeks B-tree pada nilai yang akan selalu meningkat secara monoton, misalnya kolom tipe IDENTITY. Dengan implementasi B-tree konvensional, setiap kali node penuh, ia akan dibagi 50% / 50% dan kita berakhir dengan B-tree di mana (hampir) semua node akan hanya 50% penuh.
Saya tahu bahwa Oracle menemukan ketika nilai semakin meningkat dan dalam kasus ini Oracle melakukan split 90% / 10% sebagai gantinya. Dengan begitu, (hampir) semua node akan 90% penuh dan pemanfaatan halaman yang jauh lebih baik diperoleh untuk kasus-kasus ini, sangat umum.
Saya belum dapat menemukan dokumentasi untuk fitur serupa di SQL Server. Namun, saya telah melakukan dua percobaan di mana saya memasukkan N bilangan bulat acak, dan N bilangan bulat berturut-turut dalam indeks, masing-masing. Kasus pertama menggunakan halaman jauh lebih banyak yang terakhir.
Apakah SQL Server menyediakan fungsionalitas yang serupa? Jika demikian: dapatkah Anda mengarahkan saya ke beberapa dokumentasi tentang fitur ini?
PEMBARUAN: Tampaknya, dari percobaan yang diberikan di bawah ini, bahwa simpul daun dijaga agar tidak dipisahkan dan simpul internal terpecah 50% / 50%. Itu membuat B-tree pada meningkatkan kunci lebih kompak daripada pada kunci acak. Namun, pendekatan 90% / 10% oleh Oracle bahkan lebih baik, dan saya masih mencari beberapa dokumentasi resmi yang dapat memverifikasi perilaku yang terlihat dalam percobaan.
sumber
Jawaban:
Jika menambahkan baris di akhir indeks, itu hanya akan mengalokasikan halaman baru untuk baris daripada membagi halaman akhir saat ini. Bukti eksperimental untuk ini di bawah ini (menggunakan
%%physloc%%
fungsi yang membutuhkan SQL Server 2008). Lihat juga diskusi di sini .Pengembalian (Hasil Anda akan bervariasi)
Ini tampaknya hanya berlaku untuk node daun. Ini dapat dilihat dengan menjalankan di bawah ini dan menyesuaikan
TOP
nilainya. Bagi saya622/623
adalah titik potong antara membutuhkan satu dan dua halaman tingkat pertama (mungkin berbeda jika Anda memiliki isolasi snapshot diaktifkan?). Itu membagi halaman secara seimbang yang mengarah ke ruang terbuang pada level ini.sumber
PRIMARY KEY
.DBCC IND
dansys.dm_db_index_physical_stats
melihat info tentang ini.