Saya telah melakukan kursus MS10775A minggu lalu dan satu pertanyaan yang muncul bahwa pelatih tidak dapat menjawab dengan andal adalah:
Apakah indeks ulang memperbarui statistik?
Kami menemukan diskusi online dengan alasan keduanya memang ada dan tidak.
sql-server
index
sql-server-2012
index-tuning
statistics
Thor Erik
sumber
sumber
REINDEX
statistik kolom yang diperbarui sebagai efek samping dari membangun kembali indeks - Anda tidak perlu memperbarui statistik. Data dalam tabel tidak berubah. Ini adalah data yang sama, hanya a) memindahkan lokasinya pada pelat pemintalan (ketika halaman direorganisasi), atau b) duduk di halaman yang berbeda (dalam kasus pembangunan kembali). Jadi: a re-indeks tidak update (beberapa) statistik: tidak ada kebutuhan untuk melakukannya.Jawaban:
Anda dapat mengingat hal-hal berikut ketika peduli tentang memperbarui statistik (disalin dari Rebuilding Indexes vs. Memperbarui Statistik (Benjamin Nevarez)
Secara default,
UPDATE STATISTICS
pernyataan hanya menggunakan sampel rekaman dari tabel. MenggunakanUPDATE STATISTICS WITH FULLSCAN
akan memindai seluruh tabel.Secara default,
UPDATE STATISTICS
pernyataan memperbarui statistik indeks dan kolom. MenggunakanCOLUMNS
opsi akan memperbarui statistik kolom saja. MenggunakanINDEX
opsi hanya akan memperbarui statistik indeks.Membangun kembali indeks , misalnya dengan menggunakan
ALTER INDEX … REBUILD
juga akan memperbarui statistik indeks dengan setara dengan menggunakanWITH FULLSCAN
kecuali jika tabel dipartisi, dalam hal ini statistik hanya sampel (berlaku untuk SQL Server 2012 dan yang lebih baru).Statistik yang dibuat secara manual menggunakan
CREATE STATISTICS
tidak diperbarui olehALTER INDEX ... REBUILD
operasi apa pun , termasukALTER TABLE ... REBUILD
.ALTER TABLE ... REBUILD
tidak memperbarui statistik untuk indeks berkerumun, jika ada yang didefinisikan pada tabel yang sedang dibangun kembali.Mengatur ulang indeks , misalnya menggunakan
ALTER INDEX … REORGANIZE
tidak memperbarui statistik apa pun.Jawaban singkatnya adalah bahwa Anda perlu menggunakan
UPDATE STATISTICS
untuk memperbarui statistik kolom dan bahwa pembangunan kembali indeks hanya akan memperbarui statistik indeks. Anda dapat memaksa pembaruan ke semua statistik di atas meja, termasuk statistik-indeks dan statistik yang dibuat secara manual, denganUPDATE STATISTICS (tablename) WITH FULLSCAN;
sintaksis.Kode berikut menggambarkan aturan yang diuraikan di atas:
Pertama, kita akan membuat tabel dengan beberapa kolom, dan indeks berkerumun:
Kueri ini menunjukkan tanggal ketika setiap objek statistik terakhir diperbarui:
Hasilnya menunjukkan belum ada pembaruan yang terjadi, yang benar karena kami baru saja membuat tabel:
Mari kita membangun kembali seluruh tabel, dan melihat apakah itu memperbarui statistik:
Hasilnya menunjukkan hanya statistik indeks yang dikelompokkan yang diperbarui.
Selanjutnya, kami melakukan
UPDATE STATS
operasi diskrit :Seperti yang Anda lihat, kami baru saja memperbarui statistik pada
d
kolom:Sekarang, kami akan memperbarui statistik di seluruh tabel:
Seperti yang Anda lihat, satu-satunya cara untuk memastikan semua statistik diperbarui adalah dengan memperbarui masing-masing secara manual, atau memperbarui seluruh tabel dengan
UPDATE STATISTICS (table);
.sumber
ALTER INDEX ... REBUILD
atauUPDATE STATISTICS
pernyataan. Jika tabel itu sendiri dibangun kembali, hanya statistik indeks berkerumun diperbarui. FYI, kunci utama dan indeks berkerumun tidak selalu didukung oleh objek indeks yang sama.Halaman Microsoft Documents untuk statistik SQL Server menyatakan :
sumber