The HASHBYTES
Fungsi hanya memakan waktu sampai 8000 byte sebagai masukan. Karena input Anda berpotensi lebih besar dari itu, duplikat dalam rentang bidang yang mendapat hash akan menyebabkan tabrakan, terlepas dari algoritma yang dipilih. Pertimbangkan dengan seksama rentang data yang Anda rencanakan untuk hash - menggunakan 4000 karakter pertama adalah pilihan yang jelas , tetapi mungkin bukan pilihan terbaik untuk data Anda.
Bagaimanapun, karena fungsi hash, bahkan jika inputnya 8000 byte atau kurang, satu - satunya cara untuk memastikan 100% kebenaran dalam hasil adalah dengan membandingkan nilai-nilai dasar di beberapa titik (baca: belum tentu pertama ). Periode.
Bisnis akan menentukan apakah akurasi 100% diperlukan atau tidak. Ini akan memberi tahu Anda bahwa (a) membandingkan nilai-nilai dasar diperlukan , atau (b) Anda harus mempertimbangkan untuk tidak membandingkan nilai-nilai dasar - seberapa banyak akurasi yang harus ditukar dengan kinerja.
Sementara tabrakan hash dimungkinkan dalam set input unik, mereka sangat jarang, terlepas dari algoritma yang dipilih. Seluruh ide menggunakan nilai hash dalam skenario ini adalah untuk secara efisien mempersempit hasil gabungan ke set yang lebih mudah dikelola, tidak harus tiba pada set hasil akhir segera. Sekali lagi, untuk akurasi 100%, ini tidak bisa menjadi langkah terakhir dalam proses. Skenario ini tidak menggunakan hashing untuk keperluan kriptografi, jadi algoritma seperti MD5 akan berfungsi dengan baik.
Akan sangat sulit bagi saya untuk membenarkan pindah ke algoritma SHA-x untuk tujuan "akurasi" karena jika bisnis akan panik tentang kemungkinan tabrakan kecil MD5, kemungkinan mereka juga akan panik bahwa algoritma SHA-x juga tidak sempurna. Mereka juga harus berdamai dengan sedikit ketidakakuratan, atau mengamanatkan bahwa kueri 100% akurat dan hidup dengan implikasi teknis yang terkait. Saya kira jika CEO tidur lebih baik di malam hari mengetahui Anda menggunakan SHA-x daripada MD5, well, baik; itu masih tidak berarti banyak dari sudut pandang teknis dalam kasus ini.
Berbicara tentang kinerja, jika tabel sebagian besar dibaca dan hasil gabung sering diperlukan, pertimbangkan menerapkan tampilan yang diindeks untuk menghilangkan kebutuhan untuk menghitung seluruh gabung setiap kali diminta. Tentu saja Anda menukar penyimpanan untuk itu, tetapi mungkin layak untuk peningkatan kinerja, terutama jika akurasi 100% diperlukan.
Untuk bacaan lebih lanjut tentang pengindeksan nilai-nilai string panjang, saya menerbitkan sebuah artikel yang membahas contoh bagaimana melakukan ini untuk satu tabel, dan menyajikan hal-hal yang perlu dipertimbangkan ketika mencoba skenario penuh dalam pertanyaan ini.