본문 바로가기
Study/DB

[DB] Join과 인덱스

by jamiehun 2023. 4. 2.

<데이터베이스 개론과 실습>을 요약 정리한 글입니다.

문제가 될 시 글을 내리도록 하겠습니다.


1. Join

Join(조인)은

한 테이블의 행을 다른 테이블의 행에 연결하여 두개 이상의 테이블을 결합하는 연산이다.

 

내부조인(Inner join)은

두 테이블 모두에서 일치하는 값을 가진 행만 반환한다.

 

반면에, 외부조인(Outer join)은 세가지로 나뉘는데

Left Outer Join / Right Outer Join / Full Outer Join이 그것이다.

 

외부 조인에는 일치하는 행과 두 테이블간에 일치하지 않는 일부 행이 포함된다.

 

Left Outer Join은 LEFT 테이블의 모든 행과 두 테이블간에 일치하는 레코드를 반환하고,

Right Outer Join은 RIGHT 테이블의 모든 행과 두 테이블간에 일치하는 레코드를 반환한다.

Full Outer Join은 Left Outer Join과 Right Outer Join의 결과를 결합한다.

 

 

2. 인덱스

인덱스는

자료를 쉽고 빠르게 찾을 수 있도록 만든 데이터 구조이다.

DB에서는 원하는 데이터를 빨리 찾기 위해 투플의 키 값에 대한 물리적 위치를 기록해둔 자료구조로서, 

일반적인 RDBMS의 인덱스는 대부분 B-Tree 구조로 되어 있다. (데이터의 검색 시간을 단축하기 위한 자료 구조)

 

테이블의 수정, 삭제 등의 변경이 발생하면 인덱스의 재구성이 필요하며, 

순서대로 정렬된 속성과 데이터의 위치만 보유하므로 테이블보다 작은 공간을 차지한다.

 

클러스터 인덱스는

인덱스의 리프 노드들이 정렬된 상태로 저장된 테이블 자체가 되며,

특정 column을 기본키(primary key)로 지정하면 자동으로 클러스터형 인덱스가 생성된다.

 

보조 인덱스는

인덱스의 리프노드들이 실제 데이터 값이 아닌 테이블 상의 데이터 위치를 지정하는 rowid를 저장한다.

일반 책의 목차와 같이 별도의 공간에 인덱스가 저장된다.

 

인덱스는 경우에 따라서 잘 활용해야하는데,

의미없이 인덱스를 생성하면 검색이 더 느려지고 저장공간만 낭비한다.

 

몇가지 살펴보자면,

  1. 인덱스는 WHERE 절에 자주 사용되는 속성이어야 한다.
  2. 단일 테이블에 인덱스가 많으면 속도가 느려질 수 있다. (테이블당 4~5개 정도를 권장)
  3. 속성이 가공되는 경우 사용하지 않는다.
  4. 속성의 모든 값이 다른 경우 유리하다.