'join'에 해당되는 글 5건
- 2013.03.25 [Oracle] Nested Loops, Sort Merge, Hash
- 2012.11.23 [MS-SQL] JOIN UPDATE / DELETE
- 2012.07.21 [Oracle] JOIN DELETE
- 2010.09.05 [Oracle] 다른 테이블 조인해서 UPDATE 하기
- 2010.03.03 [MS-SQL] 다른 테이블 조인해서 UPDATE 하기
[Oracle] Nested Loops, Sort Merge, Hash
1. Nested Loops Join
각 단계를 완료하고 나서 다음단계로 넘어가는게 아니라 한 레코드씩 순차적으로 진행한다.
단, order by는 전체집합을 대상으로 정렬해야 하므로 작업을 모두 완료한 후 다음 오퍼레이션을 진행한다.
다른 조인방식보다 인덱스 구성 전략이 특히 중요하며, 소량의 데이터를 처리하거나 부분범위 처리가 가능한 OLTP성 환경에 적합한 조인방식이다.
2. Sort Merge Join
두 테이블을 각각 정렬한 다음에 두 집합을 머지(Merge)하면서 조인을 수행한다
- 소트단계:양쪽 집합을 조인 컬럼 기준으로 정렬
- 머지단계:정렬된 양쪽 집합을 서로 Merge
소트머지 조인은 Outer루프와 Inner루프가 Sort Area에 미리 정렬해둔 자료구조를 이용할분 실제 조인오퍼레이션은 NL조인과 동일 하지만 Sort Area가 PGA영역에 할당되므로 래치획득과정이 없으므로 SGA를 경유하는 것보다 훨씬 빠름
PGA영역에 저당된 데이터를 이용하여 빠름으로 소트부하만 감수하면 NL조인보다 유리
인덱스유무에 영향을 받지 않음.
스캔위주의 액세스방식을 이용 (단, 양쪽 소스 집합에서 정렬 대상 레코드를 찾는 작업은 인덱스를 이용해 Random엑세스 방식으로 처리, 이때 액세스량이 많다면, 소트머지 이점이 사라질수 있음)
대부분 해시조인인 보다 느린 성능을 보이나, 아래와 같은 상황에서는 소트머지 조인이 유용.
- First테이블에 소트연산을 대체할 인덱스가 있을때
- 조인할 First 집합이 이미 정렬되어 있을때
- 조인 조건식이 등치(=)조건이 아닐때
3. Hash Join
해시조인은 소트머지조인과 NL조인의 효과적이지 못한 상황에 대한 대안으로서 개발됨
둘 중 작은 집합을 읽어 Hash Area에 해시 테이블을 생성하고, 반대쪽 큰 집합을 읽어 해시 테이블을 탐색하면서 조인하는 방식
성능을 좌우하는 요소
- 한쪽테이블이 Hash Area에 담길 정도로 충분히 작아야 함
- Build Input 해시키 컬럼에 중복값이 거의 없어야 함
언제 사용하면 효과적인가?
- 조인 컬럼에 적당한 인덱스가 없어 NL조인이 비효율적일때
- 조인 컬럼에 인덱스가 있더라도 NL조인 드라이빙에서 Inner로 조인액세스량이 많아 Random 액세스 부하가 심할때
- 소트머지조인하기에는 두테이블의 소트부하가 심할때
- 수행빈도가 낮고 쿼리수행이 오래걸리는 대용량 테이블을 조인할때
해시테이블은 단 하나의 쿼리를 위해 생성하고 조인이 끝나면 바로 소멸하는 자료구조이므로, 수행빈도가 높은 쿼리애서 사용하면 CPU와 메모리 사욜률을 크게 증가시키고, 래치 경합이 발생하여 시스템 동시성을 떨어뜨림
그러므로 수행빈도가 낮고, 쿼리수행시간이 오래걸리는, 대용량 테이블을 조인할때 주로 사용해야한다.
타 사이트 Join 정리 내용
>> http://blog.naver.com/toyoui46?Redirect=Log&logNo=120144288851
>> http://blog.naver.com/taiha/10076692782
'Database / Sql' 카테고리의 다른 글
[Oracle] session 수 체크 및 session 죽이기 (0) | 2013.07.31 |
---|---|
[Oracle] 11g 삭제 방법 (0) | 2013.07.15 |
[Oracle] PK 수정 (0) | 2013.03.25 |
[MSSQL] 개발자를 위한 MS SQL Server 성능 조정 및 최적화 (0) | 2013.03.19 |
[MSSQL] 전체 백업 유지관리 계획 만들기 (4) | 2013.03.19 |
[MS-SQL] JOIN UPDATE / DELETE
[예제] JOIN UPDATE
UPDATE TABLE_MAIN
SET TABLE_MAIN.REGUSR = '쫑'
FROM TABLE_JOIN
WHERE TABLE_JOIN.SEQNUM = TABLE_MAIN.SEQNUM
AND TABLE_JOIN.PROGBN = 'Y'
[예제] JOIN DELETE
DELETE TABLE_MAIN
FROM TABLE_JOIN
WHERE TABLE_JOIN.SEQNUM = TABLE_MAIN.SEQNUM
AND TABLE_JOIN.PROGBN = 'Y'
조인을 이용한 UPDATE/DELETE 구문의 FROM 절 이후는 똑같다.
'Database / Sql' 카테고리의 다른 글
[Oracle] PL/SQL PROCEDURE Scripts Sample 설명 (0) | 2012.11.27 |
---|---|
[Oracle] Toad 실행계획 (0) | 2012.11.23 |
[MS-SQL] 날짜 차이 계산 (0) | 2012.11.08 |
[Oracle] Toad for Oracle 기능 및 사용법 (파일첨부) (0) | 2012.11.08 |
[Oracle] 테이블 권한주기 (0) | 2012.11.06 |
[Oracle] JOIN DELETE
## 1 ##
DELETE
FROM 테이블1 A
WHERE EXISTS
(
SELECT 1
FROM 테이블2 B
WHERE A.테이블1_키 = B.테이블2_키
);
DELETE
FROM T_CLASS_DIAG A
WHERE EXISTS
(
SELECT 1
FROM T_PORTFOLIO_HISTORY
WHERE LECTURE_ID = A.LECTURE_ID
AND USER_ID = A.USER_ID
);
## 2 ##
DELETE
FROM SG2EXAMT T1
WHERE (T1.PATNO,T1.ORDDATE,T1.RESVTYPE)
= (SELECT PATNO,ORDDATE,RESVTYPE
FROM SG1RESVT T2
WHERE T2.CUSTCODE = '125000'
AND T2.ACPTDATE = TO_DATE('20100329','YYYYMMDD')
);
'Database / Sql' 카테고리의 다른 글
[Oracle] PL/SQL - 블럭 구조 (0) | 2012.10.31 |
---|---|
[Oracle] PL/SQL - 개념과 예제 (0) | 2012.10.31 |
[Oracle] Windows 2008 R2 64bit 에서 Oracle ODBC 설정 (0) | 2012.07.11 |
[Oracle] Windows 64bit 오라클 Client 설치 (0) | 2012.07.11 |
[Oracle] Toad vs Oracle Product Release History (0) | 2012.06.19 |
[Oracle] 다른 테이블 조인해서 UPDATE 하기
UPDATE TABLE_A
SET SDLRAT = ( SELECT B.CUSTID FROM TABLE_B B
WHERE B.CUSTCD = TABLE_A.CUSTCD
AND B.ITMCOD = TABLE_A.ITMCOD )
'Database / Sql' 카테고리의 다른 글
[Oracle] 9i 이상에서 컬럼명 변경 (0) | 2010.11.11 |
---|---|
[MSSQL] 테이블 복사 (0) | 2010.10.20 |
[Oracle] TOAD 기본 단축키 (0) | 2010.08.05 |
[Oracle] PL/SQL (0) | 2010.06.29 |
[Oracle] 함수 정리 (0) | 2010.06.28 |
[MS-SQL] 다른 테이블 조인해서 UPDATE 하기
SET RESULT = B.RESULT
FROM TABLE1 A JOIN TABLE2 B ON A.CODE = B.CODE
WHERE .....
'Database / Sql' 카테고리의 다른 글
[Oracle] Windows 서버에서 오라클 Thread 죽이기 (0) | 2010.03.16 |
---|---|
[Oracle] TNANAMES.ORA 설정 및 TOAD 연결 (0) | 2010.03.15 |
ntwdblib.dll (1) | 2009.11.30 |
[MS-SQL] 함수 모음 및 사용법 (1) | 2009.11.23 |
[Oracle] DML 절에 With Check option 조건 (0) | 2009.06.30 |