DB

RDBMS 인덱스

aeongsseu 2023. 5. 23. 16:33

RDBMS의 인덱스는 데이터 조회 시 더 빠르게 조회 하기 위해 특정 컬럼 또는 특정 컬럼들로 미리 정렬을 해두는 것이다.

예시로 아래와 같은 쿼리문이 있다 할때

SELECT name
FROM USER_TABLE
WHERE sign_up_date < '2015-12-25'

인덱스가 없다면 테이블을 전부 읽어봐야 겠지만(FULL TABLE SCAN) sing_up_date에 대한 인덱스가 있다면 '2015-12-25' 이전 데이터만 전부 가져오면 될 것이다.

 

인덱스는 테이블을 물리적으로 정렬 시켜버리는 클러스터드 인덱스가 있고

정렬된 인덱스 테이블을 따로 만드는 넌 클러스터드 인덱스가 있다.

 

물리적으로 정렬을 시켜버리는 만큼 클러스터드 인덱스는 테이블 당 하나밖에 못만들고 따로 테이블을 만드는 넌 클러스터드 인덱스는 여러개 만들 수 있다.

 

또한 인덱스는 모든 테이블에 다 갖다 만들면 좋은게 아니라 인덱스를 만들면 좋은 테이블이 있고 안좋은 테이블이 있는데 이는 DBA의 역량에 달렸다.

 

기본적으로 조회가 많고 데이터의 수정이 적은 테이블에 인덱스를 만들면 좋고 그 역은 좋지않다.

또한 FULL TABLE SCAN할 경우 데이터를 여러개씩 읽을 수 있는데 인덱스를 사용할 경우 트리를 타고타고 가기때문에 조회하는 데이터가 많을 경우 인덱스가 적절한 테이블에서도 오히려 FULL TABLE SCAN시 조회 성능이 더 잘나오는 경우가 있다.

 

글로만 봐서는 이해하기 어려울 수 있으니 다음 링크를 참고하면 좋다.

https://lng1982.tistory.com/144