Tôi có một quy trình được lưu trữ đang hoạt động với một lượng lớn dữ liệu. Tôi có dữ liệu được chèn vào bảng tạm thời. Dòng chảy chung của sự kiện là một cái gì đó giống nhưTạo khóa chính trên bảng tạm thời - Khi nào?
CREATE #TempTable (
Col1 NUMERIC(18,0) NOT NULL, --This will not be an identity column.
,Col2 INT NOT NULL,
,Col3 BIGINT,
,Col4 VARCHAR(25) NOT NULL,
--Etc...
--
--Create primary key here?
)
INSERT INTO #TempTable
SELECT ...
FROM MyTable
WHERE ...
INSERT INTO #TempTable
SELECT ...
FROM MyTable2
WHERE ...
--
-- ...or create primary key here?
Câu hỏi của tôi là khi nào là thời gian tốt nhất để tạo ra một khóa chính trên bảng #TempTable của tôi? Tôi đã giả thuyết rằng tôi nên tạo ràng buộc/chỉ mục khóa chính sau khi tôi chèn tất cả dữ liệu vì chỉ mục cần được tổ chức lại khi thông tin khóa chính đang được tạo. Nhưng tôi nhận ra rằng giả định gạch dưới của tôi có thể sai ...
Trong trường hợp có liên quan, các loại dữ liệu tôi đã sử dụng là có thật. Trong bảng #TempTable
, Col1
và Col4
sẽ tạo thành khóa chính của tôi.
Cập nhật: Trong trường hợp của tôi, tôi đang nhân bản khóa chính của bảng nguồn. Tôi biết rằng các trường sẽ tạo nên khóa chính của tôi sẽ luôn là duy nhất. Tôi không có mối quan tâm về một bảng thay đổi không thành công nếu tôi thêm khóa chính ở cuối.
Mặc dù vậy, điều này sang một bên, câu hỏi của tôi vẫn đứng ở mức nhanh hơn giả sử cả hai sẽ thành công?
P.S. Tôi xin lỗi nếu đây là một bản sao. Nó là cơ bản đủ để nó có thể, nhưng tôi đã không thể tìm thấy bất cứ điều gì như nó.
Thú vị. Cảm ơn bạn. Hữu ích. Bạn có thể mở rộng với một số ví dụ có lẽ? –
@Cade, cho chỉ mục nhóm, bạn có nghĩa là thứ tự vật lý trên đĩa, không phải thứ tự logic (bảng không có thứ tự logic). –
Không, thứ tự vật lý trên đĩa có thể là bất cứ thứ gì. Chỉ số nhóm chỉ đơn giản là dữ liệu được lưu trữ trong các lá trong một chỉ số btree thay vì trong một đống. Vẫn có thể có sự phân mảnh trong SQL Server và trên đĩa. –