Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Định danh duy nhất (hướng dẫn) làm khóa chính trong thiết kế cơ sở dữ liệu

GUID 128 bit (uniqueidentifier khóa) tất nhiên lớn hơn gấp 4 lần so với int 32 bit Chìa khóa. Tuy nhiên, có một số ưu điểm chính:

  • Không có vấn đề "CHÈN IDENTITY" khi hợp nhất nội dung
  • Nếu bạn sử dụng giá trị COMB thay vì NEWSEQUENTIALID (), bạn sẽ nhận được dấu thời gian CHÈN "miễn phí". Bạn thậm chí có thể SELECT từ khóa chính dựa trên phạm vi ngày / giờ nếu bạn muốn với một vài CAST() ưa thích cuộc gọi.
  • Chúng là duy nhất trên toàn cầu, điều này trở nên khá hữu ích ngay bây giờ và sau đó.
  • Vì không cần theo dõi các vết nước cao, lớp BL của bạn có thể chỉ định giá trị thay vì SQL Server, do đó loại bỏ bước SELECT scope_identity() để lấy khóa chính sau khi chèn.
  • Nếu có thể từ xa bạn có thể có hơn 2 tỷ bản ghi, bạn sẽ cần sử dụng bigint (64 bit) thay vì int . Sau khi bạn làm điều đó, uniqueidentifier chỉ lớn gấp đôi một bigint .
  • Việc sử dụng GUID giúp an toàn hơn khi để lộ các khóa trong URL, v.v. mà không khiến bạn bị các cuộc tấn công "đoán là ID".
  • Giữa cách SQL Server tải trang từ đĩa và cách bộ xử lý hiện chủ yếu là 64 bit, chỉ vì một số là 128 bit thay vì 32 không có nghĩa là phải mất gấp 4 lần để so sánh. Thử nghiệm cuối cùng mà tôi thấy cho thấy GUID nhanh như nhau.
  • Kích thước chỉ mục phụ thuộc vào bao nhiêu các cột được bao gồm. Mặc dù bản thân các GUID lớn hơn, nhưng 8 hoặc 12 byte thừa có thể không đáng kể so với các cột khác trong chỉ mục.

Cuối cùng, việc loại bỏ một số lợi thế hiệu suất nhỏ bằng cách sử dụng số nguyên có thể không đáng làm mất đi những lợi thế của GUID. Hãy kiểm tra nó theo kinh nghiệm và tự quyết định.

Cá nhân tôi vẫn sử dụng cả hai, tùy thuộc vào tình huống, nhưng yếu tố quyết định chưa bao giờ thực sự ảnh hưởng đến hiệu suất trong trường hợp của tôi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Loại bỏ đệm khi gửi kết quả truy vấn trong email từ SQL Server (T-SQL)

  2. Sử dụng biến có TOP trong câu lệnh select trong SQL Server mà không làm cho nó động

  3. Cách duy trì thứ tự chèn trong SQL Server

  4. Cách bỏ tất cả các Khóa chính khỏi tất cả các bảng trong Cơ sở dữ liệu SQL Server - Hướng dẫn SQL Server / TSQL Phần 65

  5. SQL Server BẤT KỲ Người khai thác nào được giải thích