SQL 핵심포인트

yozzum·2022년 4월 20일
0

SQL

목록 보기
2/25

서브쿼리

  • 서브쿼리는 쓰이는 위치에 따라 세 가지로 나뉜다.
  1. SELECT : scalar subquery
  2. FROM : inline view
  3. WHERE/HAVING : 중첩 서브쿼리

기본 조인

  1. inner join
  2. left outer join
  3. right outer join
  4. full join

인덱스

  • 여러가지 종류의 인덱스가 있는데, 흔히 사용하는 것은 B-Tree 인덱스(Balanced Tree Index)이다.
  • 이 외에도 비트맵, IOT, 클러스터형 인덱스가 있다.
  • 인덱스를 생성하면 인덱스 칼럼을 기준으로 소팅 되어 기존 테이블과 매핑된 테이블이 저장된다.
  • 보통 테이블은 데이터들이 물리적으로 흩어져있어서 특정 조건의 데이터를 찾으려면 테이블 풀스캔을 해야한다.
  • 인덱스는 정렬되어있기 때문에 특정 조건의 데이터를 조회할 때 시작점을 기준으로 스캔을 할 수 있다.
  • 인덱스는 테이블과 매핑되어있기에 인덱스에서 먼저 데이터를 찾은 후에 기존 테이블에서 나머지 데이터를 꺼내오는 식이다.
  • 인덱스가 기존 테이블의 블럭 주소를 가지고 있는 것이다. 각 블럭에는 데이터가 로우 단위로 저장되어 있다.
  • 따라서 인덱스를 활용하면 조건에 해당하는 블럭만 스캔하면 되는 것이다.
  • where 절이나, order by 절에 자주사용하는 칼럼에 적용한다.

조인 알고리즘

※ inner table : IDOL_MEMBER, outer table : IDOL_GROUP

  1. NL 조인
  • 중첩 FOR문과 같은 원리
  • INNER TABLE에서 JOIN 칼럼이 인덱스에 걸려있지 않으면 비효율 발생함.
  • 대용량테이블 JOIN에는 적절하지 않으며 OLTP성 환경의 쿼리에 적절함.
  • 양이 적은 테이블이 OUTER TABLE로 설정되는 것이 좋음.
  1. SM 조인
  • NL 조인과 유사함
  • 차이점은 두 테이블을 먼저 JOIN 칼럼을 기준으로 SORTING하고나서 JOIN함.
  • INNER TABLE에 적절한 인덱스가 없는 경우 쓰일 수 있음.
  • 범위로 조인되는 경우 적절함.
  • SORTING 작업이 PGA영역에서 수행되기 때문에 경합이 일어나지 않아 좋음.
  1. HASH 조인
  • 대용량 테이블을 JOIN할 때 (배치에서 사용하면) 좋다.
  • 수행원리: INNER TABLE이 대용량인 경우 OUTER TABLE을 Build Input으로 삼아서 HASH 영역에 저장해놓음.
    - HASH 영역은 PGA영역에 있기 때문에 속도가 빠름. OUTER TABLE이 HASH 영역에 올라가고, INNER TABLE이 읽히면서 조인되는 방식
    - OUTER TABLE이 HASH 영역에 올라갈때는 JOIN 칼럼을 기준으로 HASH FUNCTION이 적용되기 때문에 이 KEY 칼럼에 중복값이 없을수록 성능에 유리함.
    - EQUAL JOIN만 가능함 SM JOIN처럼 Random Access 부하가 없음. 유의할점은 HASH영역의 사이즈가 정해져있기 때문에 OUTER 테이블의 크기가 충분히 작아야함.(초과 시 디스크 영역을 사용하여 성능에 불리함)
    - 수행빈도가 높은 OLTP환경에서 HASH JOIN으로 불리면 CPU나 메모리 사용량이 높아질 수 있어서 실행계획을 확인하고 힌트를 사용하여 다른 방식으로 유도해야함.
profile
yozzum

0개의 댓글