database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 4282 게시물 읽기
No. 4282
Re: nestloop 와 Merge/Hash Join의 차이가 뭔가요?
작성자
정회민(hmjung97)
작성일
2002-08-05 18:17
조회수
1,270

인덱스를 이용하는 방식중

 

nested loop 방식과 merge join 의 차이를 물으셨군요.

 

두 방식은 각 DBMS의 알고리즘에 따라 혹은 사용자의 강제에 따라

 

인덱스를 사용하는 방식인데요.

 

별거 없고요.

 

select * from table where a=1 and b=2;

 

라고 하였을때 a,b칼럼에 대해 각각의 인덱스가 생성되어 있다면

 

네스티드 루프는 a 인덱스에서 1을 찾고 그 녀석들중에서 b가 2인

 

놈들을 찾습니다. 즉 a=1 인 OID 를 모은다음 그 oid를 가지고

 

B=2인지 하나하나 찾아갑니다. loop를 돈다는 것이 그이야기임.

 

반면, merge join은 a용 인덱스에서 1인 넘을 다 긁어옵니다.

 

b용 인덱스에서 2인 놈을 다 긁어옵니다. 둘 다에 속해있는 넘을 찾습니다.

 

결과를 냅니다.

 

사족으로 얼핏 보아서는 merge join이 빨라 보인다고요? 혹은 반대라고요.

 

만일 10만 레코드중 a=1인 넘이 고작 2개이고, b=2인 넘이 그중 하나도 없다면 nested loop로 2개 rowid만 끄집어 내서 인덱스로 가뿐하게 비교하고

끝납니다.

 

반면, 같은 경우에 10만 레코드중 1만개가 b=2라면, a=1인거 두개 뽑고

b=2인거 1만개 뽑아서 merge 한다면 물론 merge야 두줄이니 별거 아닙니다만 1만개 뽑는게 큰일이겠지요.

 

또 다시 생각해보면, nested join 의 경우에 b=2인 넘 1만개를 찾아서 각각 이것이 2인지 아닌지 인덱스를 뒤지면 고작 2줄 뒤지려고 1만번 loop를 돌죠.

 

이게 우스워 보이지만 이퀄이 아니라 범위이고 이러면 성능차이가

 

팍팍 납니다.

이 글에 대한 댓글이 총 1건 있습니다.

아 답변 감사합니다 :)

네스티드 루프라.. =_=

감은 오지만 어디에 적용해야할지는 막막합니다요 ^^;;

수고하세용~

소타님이 2002-08-08 01:09에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
4287한글 검색이 이상해여 도와주세요
장승현
2002-08-06
910
4286postgresql-7.1.3-win32 에서는 디비생성을 할 수 없나요?
루나
2002-08-06
915
4281postgresql의 능력은 어느정도일까요??
조연
2002-08-05
1051
4283┕>Re: postgresql의 능력은 어느정도일까요??
정회민
2002-08-05 19:22:54
1396
4284 ┕>Re: Re: postgresql의 능력은 어느정도일까요??
정재익
2002-08-05 21:42:37
1219
4280nestloop 와 Merge/Hash Join의 차이가 뭔가요? [1]
소타
2002-08-03
1139
4282┕>Re: nestloop 와 Merge/Hash Join의 차이가 뭔가요? [1]
정회민
2002-08-05 18:17:50
1270
4271alter table [2]
박준철
2002-07-26
1867
4269쿼리 방법을 알려주시면 감사하겠습니다. [1]
주성열
2002-07-26
1137
4268su - postgres 가 안되네요? [1]
김기찬
2002-07-25
1199
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다