Oracle
 sql >> база данни >  >> RDS >> Oracle

По-бърз хеш с по-малко сблъсъци?

Кой метод е по-бърз?

Не съм отбелязал това, но бих предположил, че DBMS_SQLHASH е най-бързият, тъй като е създаден точно за този тип проблеми.

Това е официален пакет, но не е добре документиран в Сигурност Ръководство . Не е в страницата с 5964(!) Справочник за PL/SQL пакети и типове и трябва да grant execute on dbms_sqlhash to [user]; за да работи, вероятно затова почти никой не е чувал за него.

Например:

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

Възможност от сблъсък

Има някои въпроси относно шансовете за сблъсък:Хеш сблъсък - какви са шансовете? , Могат ли два различни низа генериране на същия MD5 хеш код?

Не съм сигурен точно какво се случва с шанса, когато започнете да сумирате много редове, но шансовете за един сблъсък са толкова абсурдно ниски, че вероятно сте добре.

Не разбирам математиката, но съм сигурен, че най-вероятната причина за сблъсък е грешка в програмирането, ако се опитате да напишете своя собствена функция.

Виждал съм и създавам скриптове точно като този и има много фини начини да го прецакате. Например нулеви стойности и размяна на стойности между редове или колони. Въпреки че сега използвате само една колона, за да попречите на някой да напише някой от тези грозни скриптове, трябва да използвате пакета, предоставен от Oracle, когато е възможно.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle sql съпоставяне

  2. Внедряване на изискване „И двете, или или, но не нула“ в база данни

  3. Сравнете и вземете новите данни, вмъкнати в таблицата въз основа на месеца

  4. предимството на използването на тригер за попълване на сурогатен ключ в oracle plsql

  5. Методът ExecuteBatch връща масив със стойност -2 в java