스터디코딩

[SQL] 인덱스 / 데이터베이스 색인 본문

카테고리 없음

[SQL] 인덱스 / 데이터베이스 색인

퓨처디벨로퍼 2021. 12. 10. 19:06

인덱스

 

인덱스를 만들 때 데이터베이스는 하나 이상의 열을 기반으로 데이터를 빠르게 찾는 방법을 생성. 

 

 

"person" 테이블에 인덱스 생성

CREATE INDEX person_first_name_idx
ON person (first_name);

 

- 일관성 유지

CREATE INDEX [테이블이름_필드이름_idx]
ON  [테이블 네임] (인덱스에 포함할 열);

 

 

first_name 인덱스 생성 결과

 

SELECT COUNT(*)
FROM person
WHERE first_name = 'EMMA';
SELECT COUNT(*)
FROM person
WHERE first_name = 'EMMA'
      AND last_name = 'Andrews';

시간단축!!

 

SELECT COUNT(*)
FROM person
WHERE birthdate = '1999-05-05';
SELECT COUNT(*)
FROM person
WHERE birthdate = '1999-05-05'
      AND last_name = 'Andrews';

단축되지 않는다!! 인덱스 되어있지 않아서.

 

우리가 작성한 순서대로 데베가 실행하는건 아님.

데이터베이스는 쿼리를 실행할 수 있는 모든 방법을 고려한 다음 최적의 경로를 선택. 각 가능성을 '쿼리 계획'이라고 부르고 '쿼리 최적화 프로그램'은 가장 좋다고 생각하는 것을 선택. 

 

다중 인덱스 생성

CREATE INDEX person_first_name_last_name_idx
ON person (last_name, first_name);

** 순서가 중요하다. 

- last_name을 기준으로 데이터를 정렬한 다음 first_name을 기준으로 정렬. 

 

 

주의할 점.

 - 인덱스에는 저장공간이 필요하다. 

 - 데이터베이스에 데이터를 추가할 때 새 레코드를 생성하고 모든 관련 인덱스를 업데이트 해야한다. 

 

현명하게 사용.

 

 

Comments