기록이 힘이다.

[혼공 SQL] 인덱스 개념을 파악하자 본문

SQL

[혼공 SQL] 인덱스 개념을 파악하자

dev22 2022. 12. 14. 13:48
728x90

인덱스는 SELECT를 사용해서 테이블을 조회할 때 결과를 빠르게 추출하도록 도와주는 기능입니다. 

실무에서는 현실적으로 인덱스 없이 데이터베이스 운영이 불가능합니다.

 

인덱스에는 클러스터형 인덱스와 보조 인덱스가 있습니다.

클러스터형 인덱스는 기본 키로 지정하면 자동 생성되며 테이블에 1개만 만들 수 있습니다. 기본 키로 지정한 열을 기준으로 자동 정렬됩니다. 보조 인덱스는 고유 키로 지정하면 자동 생성되며 여러 개를 만들 수도 있지만 자동 정렬되지는 않습니다. 인덱스를 만들면  SELECT 문의 출력 속도가 빨라집니다.

 

인덱스의 개념

지금까지 우리가 사용한 테이블은 인덱스를 고려하지 않았습니다. 인덱스가 없어도 별 문제가 되지 않았던 이유는 데이터의 양이 워낙 적었기 때문입니다. 실무에서 운영하는 테이블에서는 인덱스의 사용 여부에 따라 성능 차이가 날 수 있습니다. 

 

인덱스의 문제점

필요 없는 인덱스를 만드는 바람에 데이터베이스가 차지하는 공간만 더 늘어나고, 인덱스를 이용해서 데이터를 찾는 것이 전체 테이블을 찾아보는 것보다 느려집니다. 

 

인덱스의 장점과 단점

적절한 인덱스를 생성하고 인덱스를 사용하는 SQL을 만든다면 기존보다 아주 빠른 응답 속도를 얻을 수 있습니다. 

 

-장점

SELECT 문으로 검색하는 속도가 매우 빨라집니다.

그 결과 컴퓨터의 부담이 줄어들어서 결국 전체 시스템의 성능이 향상됩니다.

 

-단점

인덱스도 공간을 차지해서 데이터베이스 안에 추가적인 공간이 필요합니다.

처음에 인덱스를 만드는 데 시간이 오래 걸릴 수 있습니다. 

SELECT가 아닌 데이터의 변경 작업(INSERT, UPDATE, DELETE)이 자주 일어나면 오히려 성능이 나빠질 수도 있습니다.

 

인덱스의 종류

클러스터형 인덱스는 영어사전처럼 책의 내용이 이미 알파벳 순서대로 정렬되어 있는 것입니다. 그래서 별도의 찾아보기가 없습니다. 책 자체가 찾아보기입니다.

 

 

보조 인덱스는 SQL 책과 같이 찾아보기가 별도로 있고, 찾아보기에서 해당 단어를 찾은 후에 옆에 표시된 페이지를 펼쳐야 실제 찾는 내용이 있는 것을 말합니다.

 

자동으로 생성되는 인덱스 

인덱스는 테이블의 열(컬럼) 단위에 생성되며, 하나의 열에는 하나의 인덱스를 생성할 수 있습니다. 

하나의 열에 여러 개의 인덱스를 생성할 수도 있고, 여러 개의 열을 묶어서 하나의 인덱스를 생성할 수도 있습니다.

SHOW INDEX 문을 사용하면 인덱스 정보가 확인됩니다. Non_unique 은 '고유하지 않다' -->0: false / 1: true

클러스터형 인덱스는 기본 키로 지정하면 자동으로 생성된다. 

보조 인덱스는 여러 개를 만들 수 잇습니다. 하지만 보조 인덱스를 만들 때마다 데이터베이스의 공간을 차지하게 되고, 전반적으로 시스템에 오히려 나쁜 영향을 미치게 됩니다. 그러므로 꼭 필요한 열에만 적절히 보조 인덱스를 생성하는 것이 좋습니다.