REBUILD - Indeks Clustered, TABLE, atau keduanya?

9

Saya mengalami kesulitan menemukan sumber daya yang pasti di mana saja ini, jadi semoga seorang guru dapat memberi saya jawaban di sini.

Saya memiliki tabel yang sangat besar yang harus kami tambahkan kolom. Indeks berkerumun sangat terfragmentasi, dan saya ingin melakukan ALTER INDEX REBUILDuntuk membersihkannya.

Saya juga biasanya melakukan ALTER TABLE REBUILDketika saya mengubah kolom karena ini membersihkan semua petunjuk atau pemisahan dari operasi itu.

Apakah saya perlu melakukan keduanya karena kita berbicara tentang indeks berkerumun, yang pada dasarnya adalah tabel?

Kecurigaan saya adalah ALTER INDEX REBUILDpada clustered tidak akan memperbarui semua yang ALTER TABLEakan, tetapi saya juga takut bahwa ALTER TABLEtidak akan membersihkan indeks fragmentasi.

JNK
sumber
Pembangunan kembali IIRC tidak akan memperbarui statistik kolom. Keraguan itu relevan karena itu tidak akan terjadi dalam kedua kasus. :-)
Aaron Bertrand

Jawaban:

6

Jika Anda membangun kembali indeks berkerumun seharusnya tidak perlu membangun kembali tabel. Jika tabel itu tumpukan (tidak memiliki indeks berkerumun) maka Anda mungkin ingin membangunnya kembali.

mrdenny
sumber
Saya membaca sebelumnya bahwa ketika Anda menghapus kolom, Anda perlu melakukan ALTER TABLE REBUILDkarena ini akan memperbaiki pointer yang tidak diperbaiki dalam indeks yang dibangun kembali. Apakah ini tidak lagi terjadi?
JNK
Petunjuk apa? Saya belum pernah mendengarnya. Menghapus kolom tidak memiliki petunjuk apa pun, kecuali jika Anda berbicara tentang TEXT, NTEXT, tipe data IMAGE dalam SQL 2000.
mrdenny
1
Saya pikir kekhawatiran saya tidak berdasar saat itu ...
JNK
@JNK: Saya menduga maksud Anda DBCC CLEANTABLE ketika droppimg kolom yang sama dengan membangun kembali indeks clustered stackoverflow.com/a/808368/27535 dan dba.stackexchange.com/search?q=%2BDBCC+%2BCLEANTABLE
gbn
0

Bangun kembali menjatuhkan dan membuat ulang indeks. Saat Anda membuat indeks berkerumun, itu menata ulang baris tabel di samping membuat CIX (tabel tanpa CIX adalah tumpukan).

Eric Higgins
sumber
4
Rebuild tidak menjatuhkan dan membuat ulang indeks berkerumun. Menjatuhkan indeks berkerumun mengubah tabel menjadi tumpukan. JIKA membangun kembali akan 'turun dan menciptakan kembali' harus ada keadaan peralihan di mana tabel adalah tumpukan, yang tidak benar. Jika Anda tidak percaya saya bahwa tidak ada tahap tumpukan menengah, pertimbangkan bahwa jika negara tumpukan menengah seperti itu tercapai, 'buat ulang' akan memerlukan semacam, tetapi melihat sekilas pada rencana pelaksanaan pembangunan kembali mengungkapkan tidak ada jenis.
Remus Rusanu
Salam, RR, saya senang membaca posting Anda, tapi saya tidak yakin mengapa Anda akan berdebat tentang hal ini. Saya sudah menautkan MSDN resmi. Dari bagian "Indeks Pembangunan Kembali" sekitar setengah jalan, pernyataan pertama: "Membangun kembali indeks turun dan menciptakan kembali indeks." Tidak ada ambiguitas dalam pernyataan itu. Ini dia lagi: msdn.microsoft.com/en-us/library/ms188388.aspx
Eric Higgins
1
BOL dan MSDN mungkin memiliki pilihan kata yang buruk dari waktu ke waktu, dan kemudian dari waktu ke waktu ... Ini akan menjadi kasus seperti itu.
Remus Rusanu