2008-08-20 44 views
8

Chúng tôi đang lưu trữ một số Guid trong cơ sở dữ liệu MS SQL. Có một số mã kế thừa thực hiện Guid.ToString() và sau đó chuyển chúng vào một số varchar(64) và có một số mã mới hơn chuyển chúng bằng cách sử dụng thông số nhận dạng duy nhất. Khi bạn xem kết quả bằng cách sử dụng MS SQL Management studio, chúng trông khác nhau. Thứ tự byte của ba khối đầu tiên được đảo ngược nhưng thứ tự cuối cùng vẫn giữ nguyên. Tại sao?Tại sao Guid.ToString() đảo ngược thứ tự byte?

Trả lời

8

Trường định danh duy nhất trong máy chủ Sql có thể được lập chỉ mục, và do đó là 'ngược'.

Có thể tạo các hướng dẫn từ cả thông tin cụ thể về máy và thông tin 'thời gian sự kiện'.

Giá trị mặc định Guid trong Net là ngẫu nhiên, nhưng bạn có thể nhận Guids tuần tự từ nó với một cuộc gọi extern:

[DllImport("rpcrt4.dll", SetLastError = true)] 
static extern int UuidCreateSequential(out Guid guid); 

Điều này sẽ giúp bạn có được Guids dựa trên địa chỉ MAC của bạn (MSDN docs) mà là tuần tự.

Nếu bạn .ToString() các hướng dẫn tuần tự này thì bạn sẽ thấy phần đầu tiên của chuỗi thay đổi, trong khi phần còn lại không thay đổi.

Điều này làm cho kiểm tra sự bình đẳng giữa Guids nhanh hơn (như sự khác biệt sẽ là lúc bắt đầu) và cải thiện sự thay đổi cho những người cắt ngắn.

Đối với các cột tìm kiếm, SqlServer xây dựng chỉ mục theo cách tương tự với thư mục điện thoại hoặc từ điển. Tìm kiếm các từ bắt đầu bằng "Over *" nhanh hơn nhiều so với tìm từ kết thúc bằng "* flow".

Điều này có nghĩa rằng cho Sql server bất kỳ Guids tuần tự cần phải được lưu trữ với giá trị lặp lại đầu tiên, vì vậy nó sẽ lưu chúng sau ra trước.

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