[RDBMS] INDEX란?
인덱스(INDEX)란?
주로 검색(SELECT) 쿼리의 수행 속도를 높이기 위해 데이터베이스의 데이터 위치를 색인하여 기억하고 있는
기술로 테이블 단위로 생성하며 오라클의 경우 PK, FK 컬럼에는 자동으로 인덱스(색인)이 생성되고
옵티마이저의 판단에 따라 사용됩니다.
책으로 생각하면 목차가 있어 어느 페이지에 어떤 내용이 있는지 확인할 수 있다면 곧바로 찾는 내용이 있는 페이지로 갈 수 있는 장점이 있다고 생각하면 됩니다.
인덱스의 사용 이유
1. 조건 검색 속도 향상
제일 큰 이유가 아닐까 싶은데 select문의 속도 이슈는 주로 조건문으로 인해 발생하고 이때 인덱스가
대안이 될 수도 있기 때문입니다. where 조건문이 있을 때 index를 타지 않으면 조건에 부합하는 데이터를 찾기 위해 테이블 전체를 스캔해야 할 수도 있는데(Full Table Scan) 인덱스는 해당 조건에 맞는 데이터를 빠르게 찾을 수 있습니다.
2. Order by 속도 개선
이건 인덱스에 대해 알아보다가 알게 된 사실인데 인덱스 자체가 정렬된 상태로 저장되어있기 때문에 인덱스를 활용하면 상당한 리소스를 사용하는 sorting을 빠르게 끝낼 수 있다고 한다. 하지만 인덱스를 사용하면서 order by를 사용하기는 조건이 조금 까다로워 보인다.
인덱스 생성 유의점
인덱스를 남발하면 되려 역효과가 생기기 때문에 인덱스는 조건문에 자주 사용되는 컬럼에 생성하고 최대한 중복이 없는 값이 효율이 좋습니다. 그리고 조건문에 DBMS 함수가 사용되면 인덱스를 타지 않기 때문에 이점도 유의해야 합니다.
1. 조인컬럼에 사용되는(PK, FK) 컬럼
2. 조건, Order by의 대상이 잦은 컬럼
3. 중복 데이터가 적은 컬럼
인덱스의 주의점
인덱스가 정렬된 상태라고 했는데 그렇기에 테이블에 INSERT, DELETE, UPDATE가 자주 발생한다면 인덱스 테이블의 데이터 또한 그에 맞게 변경되어야 하기에 변경이 빈번하게 발생하는 테이블에는 사용을 주의해야 한다.
또한 인덱스를 생성할 때는 저장공간이 필요하기 때문에 저장공간이 부족한 상태에서 무턱대고 생성해서는 안됩니다.
인덱스의 활용방법과 인덱스 사용 비사용에 대한 차이점과 같은 내용은 좀더 해당내용을 학습후에 작성하자!