Tôi có tập lệnh mà tôi sử dụng để truy vấn các bảng hệ thống để nắm bắt tất cả các chỉ mục không được nhóm và tắt rồi xây dựng lại sau khi hoàn thành. Dưới đây là để sử dụng trên phiên bản tiêu chuẩn, nếu bạn đang ở trên doanh nghiệp, tôi sẽ thêm tùy chọn ONLINE
.
Disable
DECLARE @sql AS VARCHAR(MAX);
SET @sql = '';
SELECT
@sql = @sql + 'ALTER INDEX [' + i.name + '] ON [' + o.name + '] DISABLE; '
FROM sys.indexes AS i
JOIN sys.objects AS o ON i.object_id = o.object_id
WHERE i.type_desc = 'NONCLUSTERED'
AND o.type_desc = 'USER_TABLE'
EXEC (@sql)
Rebuild
DECLARE @sql AS VARCHAR(MAX);
SET @sql = '';
SELECT
@sql = @sql + 'ALTER INDEX [' + i.name + '] ON [' + o.name + '] REBUILD WITH (FILLFACTOR = 80); '
FROM sys.indexes AS i
JOIN sys.objects AS o ON i.object_id = o.object_id
WHERE i.type_desc = 'NONCLUSTERED'
AND o.type_desc = 'USER_TABLE'
EXEC (@sql);
Tôi thích phương pháp này vì nó là rất tùy biến như bạn có thể loại trừ/bao gồm các bảng nhất định dựa trên các điều kiện cũng như tránh một con trỏ. Ngoài ra, bạn có thể thay đổi EXEC
thành PRINT
và xem mã sẽ thực thi và chạy theo cách thủ công.
Điều kiện để loại trừ một bảng
AND o.name NOT IN ('tblTest','tblTest1');
Nguồn
2012-07-02 22:02:38
Vui lòng chỉ định RDBMS mà bạn đang nhắm mục tiêu bằng cách thêm thẻ thích hợp (Oracle, SQL Server, MySQL, v.v.). Có _will_ là câu trả lời tận dụng lợi thế của các tính năng ngôn ngữ hoặc sản phẩm không được hỗ trợ phổ biến. Cũng bằng cách gắn thẻ nó với một RDBMS cụ thể, câu hỏi của bạn có thể nhận được sự chú ý từ những người phù hợp hơn để trả lời câu hỏi của bạn. – Ben