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 phân cụm và vô hiệu hóa sau đó 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 là doanh nghiệp, tôi sẽ thêm ONLINE
tùy chọn.
Tắt
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)
Tạo lại
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ó rất dễ tùy chỉnh vì bạn có thể loại trừ / bao gồm một số bảng nhất định dựa trên các điều kiện cũng như tránh con trỏ. Ngoài ra, bạn có thể thay đổi EXEC
thành một PRINT
và xem mã sẽ thực thi và chạy nó theo cách thủ công.
Điều kiện để loại trừ bảng
AND o.name NOT IN ('tblTest','tblTest1');