programing

ora_hash는 결정론적입니까?

javajsp 2023. 8. 27. 08:55

ora_hash는 결정론적입니까?

Oracle 데이터베이스로 작업 중이며 테이블에서 데이터를 분할할 수 있어야 합니다.Rracle에는 데이터를 버킷으로 분할할 수 있는 ora_hash 함수가 있는 것으로 알고 있습니다.ora_hash 함수는 결정론적입니까?

내 프로그램에서 나는 다른 버킷 번호를 요청하는 각 쿼리와 함께 여러 개의 다른 데이터베이스 쿼리를 만들 것입니다.

예를 들어, 한 쿼리에서 처음 두 버킷을 요청할 수 있습니다.

SELECT * FROM sales WHERE ORA_HASH(cust_id, 9) in (0,1);

다음 쿼리에서 두 번째 및 세 번째 버킷을 요청할 수 있습니다.

SELECT * FROM sales WHERE ORA_HASH(cust_id, 9) in (1,2);

위의 예에서 ora_hash는 항상 테이블을 정확히 같은 10개의 버킷으로 나눕니까?표의 데이터가 변경되지 않았다고 가정합니다.두 번째 버킷(버킷 1)은 두 쿼리에서 모두 동일합니까?

시드 값을 사용하면 오라클이 동일한 데이터 세트에 대해 서로 다른 결과를 반환할 수 있다는 문서가 있습니다.따라서 시드 값을 사용하지 않으면 ora_hash가 결정론적일 것이라고 생각합니다.설명서를 참조하십시오.

ORA_HASHNUMBER, VARCHAR, DATE 등과 같이 파티셔닝에 사용할 수 있는 데이터 유형에 대해 결정론적입니다.

그렇지만ORA_HASHCLOB와 같은 일부 다른 데이터 유형에 대해서는 결정론적이지 않습니다.


제 대답은 조나단 루이스의 기사를 바탕으로 합니다.ORA_HASH.

조나단 루이스는 그들이 결정론적이라고 명시적으로 말하지 않지만, 그는 그것을 언급합니다.ORA_HASH" 나의행해파테티이어서속파에인하여결함위지내수해야하사합다니부적용함수으는로되기시이가." 만약 해시 . 않으면 해시 파티셔닝에 사용되는 경우에는 결정론적이어야 합니다. 그렇지 않으면 파티셔닝 방식의 조인이 작동하지 않습니다.

그것을 보여주기 위해ORA_HASH일부 데이터 유형에 대해 비통계적일 수 있습니다. 아래 쿼리를 실행하십시오.그것은 같은 기사의 논평에서 나온 것입니다.

with src as (select to_clob('42') val from dual connect by level<=5)
select val,ora_hash(val,7) from src order by 2;

놀랍게도, 이와 같은 문제가 발생합니다.dbms_sqlhash.gethash.

존 헬러의 대답은 좀 더 자세한 내용이 있으니 가서 그의 대답에 투표하세요.이 답변은 여전히 받아들여지고 있기 때문에, 그의 답변의 일부를 다음과 같이 설명하겠습니다.

ORA_HASH는 파티션할 수 입니다. 를 참조하십시오.NUMBER,VARCHAR,DATE 타기.

그렇지만ORA_HASH다음과 같은 다른 데이터 유형 중 적어도 일부에 대해서는 결정론적이지 않습니다.CLOB.

언급URL : https://stackoverflow.com/questions/9450381/is-ora-hash-deterministic