Tại sao vô hiệu hóa một chỉ mục cụm làm cho bảng không thể truy cập?


11

Khi một chỉ mục bị vô hiệu hóa, định nghĩa vẫn còn trong danh mục hệ thống nhưng không còn được sử dụng. SQL Server không duy trì chỉ mục (vì dữ liệu trong bảng thay đổi) và chỉ mục không thể được sử dụng để đáp ứng các truy vấn. Nếu một Chỉ mục cụm bị vô hiệu hóa, toàn bộ bảng sẽ không thể truy cập được.

Tại sao không thể truy cập dữ liệu trực tiếp từ bảng loại bỏ cây B? (rất có thể bằng cách quét từng hàng trong bảng) Sẽ không phù hợp hơn việc khiến dữ liệu hoàn toàn không thể truy cập được?

Đó là một câu hỏi lý thuyết thuần túy - tôi sẽ không bao giờ thực sự làm điều đó. Đó không phải là một kịch bản, cũng không phải là việc cần làm, tôi chỉ muốn biết tại sao mọi việc lại diễn ra như vậy, coi đó là một câu hỏi nội bộ.

Câu trả lời:


10

Tại sao không thể truy cập dữ liệu trực tiếp từ bảng loại bỏ cây B? (rất có thể bằng cách quét từng hàng theo bảng) sẽ không phù hợp hơn dữ liệu không thể truy cập được?

Để trả lời câu hỏi của bạn, Lập chỉ mục cơ bản trở nên tiện dụng hơn - Một chỉ mục được tạo thành từ một tập hợp các trang (nút chỉ mục) được tổ chức theo cấu trúc cây B. Cấu trúc này có tính phân cấp, với nút gốc ở đầu phân cấp và các nút lá ở phía dưới. Để biết thêm chi tiết tham khảo tại đây .

Ngoài ra, như nhiều người đã mô tả, Các chỉ mục được nhóm == Các bảng gốc được sắp xếp theo thứ tự vật lý với một hoặc nhiều khóa hoặc cột. Vì vậy, khi một Index Index bị vô hiệu hóa, các hàng dữ liệu của nó không thể được truy cập. Bạn sẽ không thể Chèn bất kỳ dữ liệu nào (đối với Chỉ mục không được nhóm, Chèn sẽ thành công - nhưng điều đó không hoàn toàn liên quan đến bài đăng này - vì ở đây cuộc thảo luận về Chỉ mục cụm) cũng như hoạt động sắp xếp lại sẽ không hoạt động.

Dưới đây sẽ giải thích chi tiết cho bạn:

chúng tôi sẽ sử dụng cơ sở dữ liệu Adventureworks để xem hiệu quả của việc vô hiệu hóa Chỉ số CLUSTERED .

nhập mô tả hình ảnh ở đây

Bây giờ hãy kiểm tra số hàng trong bảng:

nhập mô tả hình ảnh ở đây

Bây giờ hãy vô hiệu hóa Chỉ mục cụm

nhập mô tả hình ảnh ở đây

Bây giờ chọn số hàng từ bảng. Lần này nó sẽ báo lỗi với thông báo dưới đây:

nhập mô tả hình ảnh ở đây

Ngay cả các hoạt động tổ chức lại không hoạt động !!

nhập mô tả hình ảnh ở đây

Bây giờ xây dựng lại Chỉ số cụm và nó sẽ hoạt động tốt.

nhập mô tả hình ảnh ở đây

Chọn bảng để xem liệu chúng ta có thể truy cập dữ liệu

nhập mô tả hình ảnh ở đây

Vì vậy, điểm mấu chốt là, nếu chúng ta vô hiệu hóa Chỉ mục cụm, thì Dữ liệu trong bảng vẫn tồn tại, nhưng sẽ không thể truy cập được đối với bất kỳ thứ gì ngoài các hoạt động Drop hoặc REBUILD. Tất cả các Chỉ mục và chế độ xem không phân cụm có liên quan sẽ không khả dụng cũng như Khóa ngoài tham chiếu bảng sẽ bị vô hiệu hóa và ở đó bằng cách dẫn FAILURE cho tất cả các truy vấn đang tham chiếu bảng.

Lưu ý: Không có tùy chọn để ENABLE Index. Bạn phải TÁI TẠO nó.


2

Cấp độ lá của cây B + bảng. Bạn đang hy vọng đạt được điều gì bằng cách vô hiệu hóa CI? Chỉ không làm điều này nếu bạn không muốn dữ liệu không thể truy cập được.

Tôi không thực sự chắc chắn tại sao SQL Server thậm chí cho phép bạn làm điều này.

CREATE TABLE T
(
    X INT CONSTRAINT PK PRIMARY KEY CLUSTERED, 
    Y INT CONSTRAINT UQ UNIQUE NONCLUSTERED
);

ALTER INDEX PK ON T DISABLE;

... cũng vô hiệu hóa NCI vì vậy ngay cả SELECTcác truy vấn mà sẽ được bao phủ bởi đó bị vô hiệu hóa. Tôi không thể nghĩ về bất kỳ trường hợp sử dụng cho việc này. - martin-smith

Việc sử dụng duy nhất tôi có thể nghĩ ra khỏi đầu là chính xác những gì đang được thảo luận. Vô hiệu hóa một bảng. Nếu bạn có một bảng mà bạn không muốn bất kỳ ai chạm vào, thậm chí dbohoặc sysadmin, thì bạn có thể vô hiệu hóa chỉ mục được nhóm. Bảng tồn tại cùng với dữ liệu, nhưng hoàn toàn không thể truy cập cho đến khi bạn kích hoạt lại chỉ mục được nhóm. - kenneth-câu cá

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.