Cá nhân tôi sử dụng INT IDENTITY
cho hầu hết các khóa chính và phân cụm của tôi.
Bạn cần phải giữ ngoài các chính chủ chốt mà là một cấu trúc logic - nó xác định duy nhất hàng của bạn, nó phải là duy nhất và ổn định và NOT NULL
. GUID cũng hoạt động tốt cho khóa chính - vì nó được đảm bảo là duy nhất. GUID là khóa chính của bạn là một lựa chọn tốt nếu bạn sử dụng bản sao SQL Server, vì trong trường hợp đó, bạn cần một cột GUID duy nhất để xác định.
Phím phân cụm trong SQL Server là một cấu trúc vật lý được sử dụng cho thứ tự vật lý của dữ liệu và rất khó để có được quyền. Thông thường, Nữ hoàng lập chỉ mục trên SQL Server, Kimberly Tripp, cũng yêu cầu một khóa phân cụm tốt để được uniqe, ổn định, càng hẹp càng tốt, và lý tưởng bao giờ tăng (tất cả đều là INT IDENTITY
).
Xem bài viết của mình trên lập chỉ mục ở đây:
và cũng thấy The Cost of GUIDs as Primary Key
Một GUID Jimmy Nilsson là một sự lựa chọn khủng khiếp xấu cho một cluste vòng chìa khóa, vì nó rộng, hoàn toàn ngẫu nhiên, và do đó dẫn đến phân mảnh chỉ mục xấu và hiệu suất kém. Ngoài ra, các hàng khóa cụm (s) cũng được lưu trữ trong mỗi và mọi mục nhập của mỗi và tất cả các nhóm (bổ sung) chỉ mục, vì vậy bạn thực sự muốn giữ nó nhỏ - GUID là 16 byte so với INT là 4 byte, và với một số chỉ số không nhóm và vài triệu hàng, điều này tạo ra sự khác biệt HUGE.
Trong SQL Server, khóa chính của bạn theo mặc định là khóa phân cụm - nhưng không nhất thiết phải như vậy. Bạn có thể dễ dàng sử dụng GUID làm khóa chính không được nhóm, và INT IDENTITY
làm khóa phân cụm của bạn - nó chỉ mất một chút ý thức về nó.
Nguồn
2012-03-15 21:37:22
Các vấn đề về hiệu suất và phân mảnh lớn nhất với 'UNIQUEIDENTIFIER' sẽ đến nếu bạn làm chỉ số nhóm của mình là – Lamak
vì vậy nó có vấn đề, có đúng không khi sử dụng int chứ không phải là pk? Tại sao tất cả mọi người sử dụng guid sau đó? –
hãy xem liên kết này để xem các hiệu ứng trên phân mảnh sử dụng 'UNIQUEIDENTIFIER' http://www.sqlskills.com/blogs/paul/post/Can-GUID-cluster-keys-cause-non-clustered-index- fragmentation.aspx. Mặt khác, hiếm khi ai đó sử dụng 'UNIQUEIDENTIFIER' trên chỉ mục nhóm – Lamak