Metode mana yang lebih cepat?
Saya belum menandai ini, tetapi saya kira DBMS_SQLHASH adalah yang tercepat, karena dibuat persis untuk jenis masalah ini.
Ini adalah paket resmi, tetapi tidak didokumentasikan dengan baik di Keamanan Panduan
. Itu tidak ada di halaman 5.964(!) Referensi Paket dan Jenis PL/SQL , dan Anda perlu grant execute on dbms_sqlhash to [user];
agar berhasil, mungkin itu sebabnya hampir tidak ada yang pernah mendengarnya.
Misalnya:
select sys.DBMS_SQLHASH.GETHASH(sqltext=>'select 1 from dual', digest_type=>1)
from dual;
digest_type:1 =HASH_MD4, 2 =HASH_MD5, 3 =HASH_SH1
Peluang tabrakan
Ada beberapa pertanyaan tentang kemungkinan tabrakan:Hash Collision - berapa peluangnya? , Bisa dua string berbeda menghasilkan kode hash MD5 yang sama?
Saya tidak yakin persis apa yang terjadi pada peluang ketika Anda mulai menjumlahkan banyak baris, tetapi kemungkinan tabrakan tunggal sangat kecil sehingga Anda mungkin baik-baik saja.
Saya tidak tahu matematikanya, tetapi saya yakin bahwa kemungkinan besar penyebab tabrakan adalah dari kesalahan pemrograman jika Anda mencoba menulis fungsi Anda sendiri.
Saya telah melihat dan membuat skrip seperti ini, dan ada banyak cara halus untuk mengacaukannya. Misalnya, nilai nol dan nilai tukar antar baris atau kolom. Meskipun Anda hanya menggunakan satu kolom sekarang, untuk mencegah seseorang menulis salah satu skrip jelek itu, Anda harus menggunakan paket yang disediakan Oracle bila memungkinkan.