게시일: Jan 10, 2012 10:55:31 PM
두 테이블을 각각 정렬한 다음 조인조건에 맞는 건을 찾아 합치는 방식.
드라이빙 테이블이 별도로 존해하지 않으며, 두 테이블이 모두 독립적으로 동등한 레벨에 있게 된다.
1. 첫 번째 로우를 받는 시간은 좀 느리지만, 전체 로우가 반환되는 시간은 빠르다.
왜냐하면 두 테이블의 데이터를 각각 정렬한 뒤에 병합하므로 정렬작업이 끝날 때까지는 어떤 로우도 반환되지 않기 때문이다.
2. 정렬 작업을 위해 추가적인 메모리를 사용한다.
이 값은 SORT_AREA_SIZE 파라미터에 명시된다.
만약 정렬 작업을 수행하면서 위 파라미터에 명시된 값 이상의 메모리를 사용하게 되면 TEMP 테이블스페이스를 사용하게 되므로 디스크 I/O가 발생하게 된다.
3. NLJ 보다는 많은 양의 데이터를 처리할 때 유리하며, 메모리만 사용해서 정렬 작업을 수행한다면 넓은 범위의 값을 검색하는데 유용하다.
4. 두 테이블의 데이터를 각각 정렬하는 작업이 전체 성능에 영향을 많이 끼치게 된다.
따라서 SELECT 리스트에서 불필요한 컬럼은 제거해서 정렬 작업을 수행할 때 좀 더 부하를 적게 해줘야 한다.
5. 일반적으로 조인조건에서 사용되는 연산자가 >, >=, <, <= 와 같은 비동등 연산자가 사용될 경우 옵티마이저는 SMJ를 사용하게 된다.