index란? 효율적인 index는 무엇인가?
in Programming on DevOps
database에서 사용되는 index에 대해서 알아보자.
index란?
데이터베이스 분야에 있어서 테이블에 대한 동작의 속도를 높여주는 자료 구조. 레코드 접근과 관련 효율적인 순서 매김 동작에 대한 기초를 제공한다.
- 인덱스는 특정 칼럼 값을 가지고 있는 열 혹은 값을 빠르게 찾기 위해서 사용된다.
- MySQL은 첫 번째 열부터 전체 테이블에 걸쳐서 연관된 열을 검색하기 때문에 테이블이 크면 클 수록 비용이 엄청나게 늘어난다.
- 만약 테이블이 쿼리에 있는 컬럼에 대한 인텍스를 가지고 있다면,
- MySQL은 모든 데이터를 조사하지 않고도 데이터 파일의 중간에서 검색위치를 빠르게 잡아낼 수 있다.
- 인덱스 위주 검색 후, 관련된 혹은 원하는 데이터들을 가져올 수 있다고 생각할 수도 있다.
index를 사용하는 이유?
- WHERE 구문과 일치하는 열을 빨리 찾기 위해서.
- 열을 고려 대상에서 빨리 없애 버리기 위해서.
- 조인 (join)을 실행할 때 다른 테이블에서 열을 추출하기 위해서.
- 특정하게 인덱스된 컬럼을 위한 MIN() 또는 MAX() 값을 찾기 위해서.
- 사용할 수 있는 키의 최 좌측 접두사 (leftmost prefix)를 가지고 정렬 및 그룹화를 하기 위해서.
- 데이터 열을 참조하지 않는 상태로 값을 추출하기 위해서 쿼리를 최적화 하는 경우에.
좋은 index는?
- 자주 조회되는 칼럼에 적용
- 조회 시 오랜시간을 소모하는 컬럼에 적용
- 데이터가 긴 경우 인덱스를 사용하지 않는다.