Tôi có một bảng có chỉ số nhóm trên hai cột - khóa chính cho bảng. Nó được định nghĩa như sau:Cách tốt nhất để thay đổi chỉ số nhóm (PK) trong SQL 2005
ALTER TABLE Table ADD CONSTRAINT [PK_Table] PRIMARY KEY CLUSTERED
(
[ColA] ASC,
[ColB] ASC
)WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF) ON [PRIMARY]
Tôi muốn loại bỏ chỉ số PK nhóm này và thêm một chỉ số clustered như sau và thêm một ràng buộc khoá chính sử dụng một chỉ số không clustered, cũng hiển thị dưới đây.
CREATE CLUSTERED INDEX [IX_Clustered] ON [Table]
(
[ColC] ASC,
[ColA] ASC,
[ColD] ASC,
[ColE] ASC,
[ColF] ASC,
[ColG] ASC
)WITH (PAD_INDEX = ON, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, IGNORE_DUP_KEY = OFF, FILLFACTOR = 90, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = OFF) ON [PRIMARY]
ALTER TABLE Table ADD CONSTRAINT
PK_Table PRIMARY KEY NONCLUSTERED
(
ColA,
ColB
) WITH(STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
tôi sẽ chỉ cần thả PK nhóm chỉ số, sau đó thêm các chỉ số nhóm mới và sau đó thêm các chỉ số chủ chốt non-clustered tiểu học, nhưng tôi biết rằng thả clustered index hiện tại sẽ làm cho dữ liệu bảng để được sắp xếp lại (xem câu trả lời ở đây What happens when I drop a clustered primary key in SQL 2005), mà tôi không nghĩ là cần thiết. Bảng đang gõ 1 TB, vì vậy tôi thực sự muốn tránh bất kỳ sắp xếp lại không cần thiết nào.
Câu hỏi của tôi là, cách tốt nhất để đi từ cấu trúc hiện tại đến cấu trúc mong muốn là gì?
CHỈNH SỬA: Chỉ muốn làm rõ. Bảng là 1TB và tiếc là tôi không có không gian để tạo một bảng tạm thời. Nếu có một cách để làm điều đó mà không tạo ra một bảng tạm thời sau đó xin vui lòng cho tôi biết.
Đó không phải là một tùy chọn. Tôi có một bảng 1TB trên RAID 1.5TB. –
SQL Server sẽ cần không gian cho cả sắp xếp lại và di chuyển. Nếu bạn đã hết dung lượng, bạn có thể sử dụng tùy chọn MOVE TO trong DROP INDEX để tạo bảng của bạn trên bộ nhớ tạm thời và sau đó tạo lại nó trên RAID của bạn. – Quassnoi
Bạn có thể chuyển các hàng thành từng phần, xóa chúng khỏi nguồn khi bạn di chuyển. Điều đó có lẽ sẽ là một quá trình rất chậm mặc dù. –