REBUILD - Chỉ mục cụm, BẢNG, hoặc cả hai?


9

Tôi gặp khó khăn khi tìm một nguồn tài nguyên dứt khoát ở bất cứ đâu, vì vậy hy vọng một đạo sư có thể cho tôi một câu trả lời ở đây.

Tôi có một bảng rất lớn mà chúng tôi phải thêm một cột vào. Chỉ số được phân cụm khá phân mảnh và tôi muốn làm ALTER INDEX REBUILDsạch nó.

Tôi cũng thường làm một ALTER TABLE REBUILDkhi tôi thay đổi các cột vì điều này sẽ dọn sạch mọi con trỏ hoặc tách khỏi hoạt động đó.

Tôi có cần phải làm cả hai vì chúng ta đang nói về một chỉ mục được nhóm, về cơ bản là bảng không?

Sự nghi ngờ của tôi là ALTER INDEX REBUILDtrên cụm sẽ không cập nhật mọi thứ theo ALTER TABLEý muốn, nhưng tôi cũng sợ rằng ALTER TABLEsẽ không làm sạch phân mảnh chỉ mục.


Xây dựng lại IIRC sẽ không cập nhật số liệu thống kê cột. Nghi ngờ điều đó có liên quan vì nó sẽ không xảy ra trong cả hai trường hợp. :-)
Aaron Bertrand

Câu trả lời:


6

Nếu bạn xây dựng lại chỉ mục được nhóm thì không cần phải xây dựng lại bảng. Nếu bảng là một đống (không có chỉ mục được nhóm) thì bạn có thể muốn xây dựng lại nó.


Tôi đã đọc trước đây rằng khi bạn loại bỏ một cột, bạn cần phải thực hiện ALTER TABLE REBUILDvì điều này sẽ sửa các con trỏ không cố định trong việc xây dựng lại chỉ mục. Đây không còn là trường hợp?
JNK

Con trỏ gì? Tôi chưa bao giờ nghe điều đó. Xóa một cột không có bất kỳ con trỏ nào, trừ khi bạn đang nói về các kiểu dữ liệu TEXT, NTEXT, IMAGE trong SQL 2000.
mrdenny

1
Tôi nghĩ rằng mối quan tâm của tôi là không có cơ sở sau đó ...
JNK

@JNK: Tôi nghi ngờ bạn có nghĩa là DBCC CLEANTABLE khi cột droppimg mà cũng giống như xây dựng lại các chỉ số clustered stackoverflow.com/a/808368/27535dba.stackexchange.com/search?q=%2BDBCC+%2BCLEANTABLE
gbn

0

Xây dựng lại giọt và tạo lại chỉ số. Khi bạn tạo một chỉ mục được nhóm, nó sẽ sắp xếp lại các hàng của bảng ngoài việc tạo CIX (một bảng không có CIX là một đống).


4
Rebuild không bỏ và tạo lại chỉ mục được nhóm. Thả chỉ số cụm biến bảng thành một đống. NẾU việc xây dựng lại sẽ "thả và tái tạo", sẽ phải có một trạng thái trung gian trong đó bảng là một đống, điều đó không đúng. Nếu bạn không tin tôi rằng không có giai đoạn heap trung gian, hãy xem xét rằng có trạng thái heap trung gian như vậy để đạt được 'tái tạo' sẽ cần một loại, nhưng nhìn nhanh vào kế hoạch thực hiện được xây dựng lại cho thấy không có loại nào.
Remus Rusanu

Trân trọng gửi tới bạn RR, tôi thích đọc bài viết của bạn, nhưng tôi không chắc tại sao bạn lại tranh luận về điểm này. Tôi đã liên kết MSDN chính thức. Từ phần "Tái tạo chỉ mục" khoảng một nửa, tuyên bố thứ nhất: "Xây dựng lại một chỉ mục giảm xuống và tạo lại chỉ mục." Không có sự mơ hồ trong tuyên bố đó. Đây là một lần nữa: msdn.microsoft.com/en-us/l Library / ms188388.aspx
Eric Higgins

1
BOL và MSDN có thể có sự lựa chọn kém về hình thức từ ngữ theo thời gian, và sau đó hết lần này đến lần khác ... Đây sẽ là một trường hợp như vậy.
Remus Rusanu
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.