Tôi biết loại câu hỏi này xuất hiện rất nhiều, nhưng tôi chưa đọc bất kỳ lý lẽ thuyết phục nào để giúp tôi đưa ra quyết định này. Xin vui lòng chịu với tôi!
Tôi có một cơ sở dữ liệu khổng lồ - nó tăng khoảng 10.000.000 hồ sơ mỗi ngày. Dữ liệu là quan hệ và vì lý do hiệu suất, tôi tải bảng bằng BULK COPY. Vì lý do này, tôi cần tạo khóa cho các hàng và không thể dựa vào cột IDENTITY.
Một số nguyên 64 bit - một bigint - đủ rộng để tôi sử dụng, nhưng để đảm bảo tính duy nhất, tôi cần một trình tạo tập trung để tạo ID cho tôi. Tôi hiện có một dịch vụ tạo như vậy cho phép một dịch vụ dự trữ số thứ tự X và đảm bảo không có va chạm. Tuy nhiên, hậu quả của việc này là tất cả các dịch vụ tôi có đều phụ thuộc vào một máy phát tập trung này, và vì vậy tôi bị hạn chế trong cách tôi có thể phân phối hệ thống của mình và không hài lòng về các phụ thuộc khác (như yêu cầu truy cập mạng) bởi thiết kế này. Điều này đã được một vấn đề trong dịp.
Bây giờ tôi đang xem xét sử dụng GUID tuần tự làm khóa chính của mình (được tạo bên ngoài thành SQL). Theo như tôi đã có thể xác định từ thử nghiệm của riêng mình, thì nhược điểm duy nhất của nó là chi phí không gian đĩa của loại dữ liệu rộng hơn (bị làm trầm trọng hơn khi sử dụng chúng trong các chỉ mục). Tôi đã không chứng kiến bất kỳ sự chậm lại rõ rệt nào trong hiệu suất truy vấn, so với thay thế bigint. Tải bảng bằng BULK COPY chậm hơn một chút, nhưng không nhiều. Các chỉ mục dựa trên GUID của tôi không bị phân mảnh nhờ triển khai GUID tuần tự của tôi.
Về cơ bản, những gì tôi muốn biết là nếu có bất kỳ cân nhắc nào khác mà tôi có thể đã bỏ qua. Hiện tại, tôi có xu hướng thực hiện bước nhảy vọt và bắt đầu sử dụng GUID. Tôi không có nghĩa là một chuyên gia cơ sở dữ liệu, vì vậy tôi thực sự đánh giá cao bất kỳ hướng dẫn.