그래서 해시를 만들 것인지 알고 싶습니다. 두 테이블 간의 조인은 전체 테이블을 collumns로 스캔하는 데 필요합니까?해시 가입이 필요합니다 전체 테이블 스캔
COL1과 COL2가 더 작기를 원하면 COL1에서 전체 스캔을 수행하여 해시 맵을 작성한 다음 sabe 해시 기능을 사용하여 COL2에서 전체 스캔을 작성합니다.
이 정보가 맞습니까?
그래서 해시를 만들 것인지 알고 싶습니다. 두 테이블 간의 조인은 전체 테이블을 collumns로 스캔하는 데 필요합니까?해시 가입이 필요합니다 전체 테이블 스캔
COL1과 COL2가 더 작기를 원하면 COL1에서 전체 스캔을 수행하여 해시 맵을 작성한 다음 sabe 해시 기능을 사용하여 COL2에서 전체 스캔을 작성합니다.
이 정보가 맞습니까?
모든 데이터베이스는 Hash Join을 실제로 구현할 수 있습니다. 그러나 I의 가능성 방법 this
해시 알고리즘 가입비슷 말할 것 것은 작은 의 두 개의 입력의 메모리 해시 테이블을 구축하고 큰 입력을 판독하고있는 프로브 - 메모리 일치 항목을 찾으려면 해시 테이블이 있으며, 이는 작업 테이블에 작성된 입니다. 작은 입력이 메모리에 맞지 않으면 해시 조인 연산자 은 두 입력을 더 작은 작업 테이블로 분할합니다. 이 작은 작업 테이블 은 작은 입력이 메모리에 맞을 때까지 재귀 적으로 처리됩니다. 질문에 관해서는
: 또한 데이터베이스와 얼마나 잘 일을 최적화 할 수 있습니다에 따라 is necessary to make a full table scan on the collumns
내가 더 말할 것입니다. 쿼리에서 두 테이블 중 하나의 행을 제한하기에 충분한 조건이 있으면 해시 병합 알고리즘을 사용하기 전에 해당 행을 끌어옵니다.
in-memory hash table of the smaller of its two inputs
을 빌드하면 최상의 방법 (테이블 스캔 일 필요는 없음)을 사용하여 테이블에서 해당 행을 가져옵니다. 이 테이블의 행을 줄이기 위해 쿼리에 조건이 없으면 테이블 스캔을 수행합니다.
then reads the larger input and probes the in-memory hash table to find matches
일 때 가장 좋은 방법을 사용하여 해당 행을 가져옵니다. 이는 반드시 테이블 스캔이 아닙니다.
는 쿼리 인 경우 :
SELECT
*
FROM BigTable
INNER JOIN LittleTable ON BigTable.Col=LittleTable.Col
와 해시를 사용하는 가입, 그것은 가장 가능성이 테이블 스캔을 수행하여 LittleTable에서 메모리에 해시 테이블을 생성합니다 다음 표는 빅 테이블들에 대해 체크를 스캔 해시 키.
는 쿼리 인 경우 :
SELECT
*
FROM BigTable
INNER JOIN LittleTable ON BigTable.Col=LittleTable.Col
WHERE LittleTable.Col2 >'2010/01/01' AND LittleTable.Col2<'2010/01/31'
와 해시를 사용하는 가입, 사용할 수있는 인덱스가 존재하는 경우가 대부분합니다 (LittleTable에서 메모리에 해시 테이블을 생성하지만 테이블 스캔을 사용하지 않습니다) 그런 다음 해시 키에 대해 테이블 스캔 BigTable 검사를 수행합니다. BigTable에서 테이블 검색을 변경하려면 필터를 추가하십시오.
한 가지를 명확히 할 수 있습니까? 거대한 테이블에서 해시 조인을 사용한다는 것을 읽었습니다. BigTable에 100m 레코드가 있고 LittleTable에 100 개의 레코드 만 들어 있다고 가정 해 보겠습니다. 해시 조인을 사용하겠습니까? 그리고 만약 그것이 : 100m 레코드 전체에 걸쳐 전체 반복이 컬럼이 해시 테이블에 나타나는지를보기 위해 정기적으로 색인 된 검색에 비해 낭비가되는 것은 아닌가? 또는 나는 무엇인가 놓치고 있냐? –
@mrhobo, 귀하의 데이터 및 쿼리와 관련된 모든 세부 정보를 포함하는 자체 질문을하십시오. 당신은 코멘트에 입력 할 수있는 것보다 훨씬 좋은 답을 얻을 수 있습니다. –