Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Hash lebih cepat dengan lebih sedikit tabrakan?

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa arti sebenarnya dari memiliki kondisi seperti di mana 0=0?

  2. daftar untuk mengikat variabel di SQL Developer

  3. Bagaimana cara mengatasi java.lang.ClassNotFoundException:Oracle.jdbc.driver.OracleDriver saat runtime?

  4. Tampilkan string dari raise_application_error dalam program java

  5. Bisakah kita menentukan derajat paralelisme secara dinamis?