Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tự động thả và tạo lại các chỉ mục hiện tại

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');


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 11 cách lấy khóa chính trong SQL Server (ví dụ T-SQL)

  2. Làm cách nào để chỉ chọn các hàng đầu tiên cho mỗi giá trị duy nhất của một cột?

  3. Giám sát TempDB SQL Server bằng cách sử dụng chế độ xem quản lý động (DMV)

  4. Thay đổi Sql-Server (express) từ một phiên bản đã đặt tên thành localhost?

  5. Cách xác định giá trị trường không thể chuyển đổi thành (thập phân, float, int) trong SQL Server