Các HASHBYTES
chức năng chỉ mất lên đến 8000 byte như là đầu vào. Bởi vì đầu vào của bạn có khả năng lớn hơn thế, các bản sao trong phạm vi của trường được băm sẽ gây ra xung đột, bất kể thuật toán được chọn. Xem xét cẩn thận phạm vi dữ liệu bạn dự định băm - sử dụng 4000 ký tự đầu tiên là lựa chọn rõ ràng , nhưng có thể không phải là lựa chọn tốt nhất cho dữ liệu của bạn.
Trong mọi trường hợp, do hàm băm là gì, ngay cả khi đầu vào là 8000 byte trở xuống, cách duy nhất để đảm bảo chính xác 100% trong kết quả là so sánh các giá trị cơ sở tại một số điểm (đọc: không nhất thiết phải trước tiên ). Giai đoạn.
Doanh nghiệp sẽ đưa ra quyết định có yêu cầu độ chính xác 100% hay không. Điều này sẽ cho bạn biết rằng (a) so sánh các giá trị cơ sở là bắt buộc hoặc (b) bạn nên cân nhắc không so sánh các giá trị cơ sở - nên đánh đổi độ chính xác bao nhiêu cho hiệu suất.
Mặc dù các va chạm băm có thể có trong một bộ đầu vào duy nhất, nhưng chúng cực kỳ hiếm, bất kể thuật toán được chọn. Toàn bộ ý tưởng sử dụng giá trị băm trong kịch bản này là thu hẹp hiệu quả các kết quả tham gia thành một tập hợp dễ quản lý hơn, không nhất thiết phải đi đến tập kết quả cuối cùng ngay lập tức. Một lần nữa, với độ chính xác 100%, đây không thể là bước cuối cùng trong quy trình. Kịch bản này không sử dụng băm cho mục đích mã hóa, do đó, một thuật toán như MD5 sẽ hoạt động tốt.
Tôi sẽ rất khó để biện minh cho việc chuyển sang thuật toán SHA-x cho mục đích "chính xác" bởi vì nếu doanh nghiệp sẽ phát cuồng về khả năng va chạm rất nhỏ của MD5, rất có thể họ cũng sẽ phát hiện ra rằng các thuật toán SHA-x cũng không hoàn hảo. Họ hoặc phải đi đến thỏa thuận với sự thiếu chính xác nhỏ, hoặc yêu cầu truy vấn phải chính xác 100% và sống với các hàm ý kỹ thuật liên quan. Tôi cho rằng nếu CEO ngủ ngon hơn vào ban đêm khi biết bạn đã sử dụng SHA-x thay vì MD5, tốt, tốt; nó vẫn không có ý nghĩa nhiều từ quan điểm kỹ thuật trong trường hợp này.
Nói về hiệu suất, nếu các bảng được đọc chủ yếu và thường xuyên cần kết quả tham gia, hãy xem xét thực hiện chế độ xem được lập chỉ mục để loại bỏ nhu cầu tính toán toàn bộ liên kết mỗi khi được yêu cầu. Tất nhiên bạn đánh đổi lưu trữ cho điều đó, nhưng nó có thể có giá trị để cải thiện hiệu suất, đặc biệt nếu cần độ chính xác 100%.
Để đọc thêm về lập chỉ mục các giá trị chuỗi dài, tôi đã xuất bản một bài viết hướng dẫn một ví dụ về cách thực hiện điều này cho một bảng duy nhất và trình bày những điều cần xem xét khi thử kịch bản đầy đủ trong câu hỏi này.