2013-05-13 37 views
8

GUID được lưu trữ nội bộ và so sánh bằng SQL như thế nào (đặc biệt là máy chủ MS SQL 2008)? Nó là một số hay chuỗi? Ngoài ra, có một hit hiệu suất lớn khi sử dụng GUID làm khóa chính không?Loại dữ liệu nào là GUID trong máy chủ SQL?

Bên cạnh những vấn đề với clustering đề cập ở đây: What are the best practices for using a GUID as a primary key, specifically regarding performance?

Tôi nghĩ rằng nó phải được số 128bit (như mô tả here), nhưng tôi không thể tìm thấy chi tiết chế độ về thế nào là nó thực hiện trong SQL server.

+0

http://stackoverflow.com/questions/6945878/how-is-a-guid-actually-stored-and-sorted-compared-in-sql-server – bummi

+0

Cảm ơn, tôi đã bỏ lỡ bằng cách nào đó .... –

Trả lời

7

16 byte, chính xác như GUID structure:

typedef struct _GUID { 
    DWORD Data1; 
    WORD Data2; 
    WORD Data3; 
    BYTE Data4[8]; 
} GUID; 
10

Hiệu suất khôn ngoan, bình thường GUID là chậm hơn so với INT trong SQL Server

Nếu bạn có kế hoạch để sử dụng GUID, sử dụng uniqueidentifer thay vì varchar như kiểu dữ liệu . Microsoft đã không đề cập đến cách họ thực hiện nó, có một số tối ưu hóa tốc độ khi bạn sử dụng uniqueIdentifer làm kiểu dữ liệu.

Để sử dụng GUID làm khóa chính mà không bị mất tốc độ của số nguyên, hãy làm cho giá trị GUIDtuần tự. Xác định uniqueidentifer loại dữ liệu là PK, đặt mặc định là NEWSEQUENTIALID().

Xem NEWSEQUENTIALID (Transact-SQL) để biết thêm chi tiết.

Làm thế nào để giá trị tuần tự GUID giúp hiệu suất, hãy xem The Cost of GUIDs as Primary Keys.

+0

+1 Cảm ơn các liên kết thú vị. –

Các vấn đề liên quan