Cách không đau để tạo một chỉ mục cụm trên một bảng lớn?


22

Vì vậy, chúng tôi có một trang web khách hàng đang phàn nàn về một số hiệu suất chậm nghiêm trọng. Tôi đã xem xét một lần và rõ ràng vấn đề là do Ai đó khác (grrrr) đã thiết kế một bảng chứa khoảng 20 triệu bản ghi mà không có chỉ số phân cụm.

Bây giờ tôi muốn tạo một chỉ mục được nhóm trên bảng đó - nhưng trong môi trường thử nghiệm của tôi, create indexlệnh của tôi đã chạy được một giờ và nó vẫn chưa được thực hiện. Trang web của khách hàng là một sàn cửa hàng hoạt động 24/7 và không thể dành một giờ ngừng hoạt động trong khi tôi tạo một chỉ mục.

Có một số phương pháp ít mạnh mẽ hơn để tạo chỉ mục sẽ hoàn thành công việc nhanh chóng hoặc thực hiện theo cách thông minh nào đó sẽ không hoàn toàn giết chết hiệu suất của máy chủ trong khi nó bận?

Chúng tôi đang sử dụng SQL Server Enterprise Edition.

Câu trả lời:


26
  • Nếu máy chủ sql của bạn là phiên bản Enterprise + và bảng không có bất kỳ trường BLOB nào - CREATE CLUSTERED INDEX ... WITH(ONLINE=ON)

  • Nếu không - không có cách nào khác ngoài việc tạo bảng có cùng lược đồ ở bên cạnh và chuyển dữ liệu sang nó một cách khôn ngoan, bao gồm tất cả các hoạt động INSERT / UPDATE / DELETE (ví dụ sử dụng kích hoạt), sau đó bỏ chính xác bảng cũ và đổi tên mới có cùng tên với cũ - nhược điểm là: chậm, thêm tải cho máy chủ và lưu trữ


12

Không chắc chắn phiên bản máy chủ SQL nào là khách hàng của bạn sử dụng. Trong doanh nghiệp, bạn có thể tạo chỉ mục bằng (ONLINE = ON), do đó bảng có sẵn cho đến khi chỉ mục được tạo.


8
  • Tạo bảng mới giống hệt với bản gốc (rõ ràng sẽ cần một tên khác)
  • Tạo chỉ mục cụm trên bảng mới
  • Tải dữ liệu vào bảng mới
  • Bỏ bảng gốc
  • Đổi tên bảng mới bằng tên gốc

Hãy chắc chắn rằng bạn áp dụng bất kỳ quyền được yêu cầu từ bản gố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.