[데이터베이스] 인덱스(2)

조수훈·2023년 9월 28일
0

DataBase

목록 보기
9/11
post-thumbnail

인덱스 스캔 방식

인덱스 스캔은 데이터베이스에서 인덱스를 활용하여 효율적으로 데이터 레코드를 검색하는 방식을 말합니다.
인덱스 스캔 방식에는 다양한 방식이 있습니다.

Index Full Scan : 인덱스의 모든 데이터를 읽어오는 방법입니다. 모든 인덱스 레코드를 순차적으로 스캔하며, 주로 특정 조건 없이 모든 레코드를 처리해야 할 때 사용됩니다. 인덱스 크기가 작은 경우에는 빠른 검색이 가능하지만, 테이블의 크기가 큰 경우에는 전체 테이블 스캔보다 느릴 수 있습니다.

Index Range Scan : 인덱스의 일부 데이터만 읽어오는 방법으로, 인덱스의 범위를 지정하여 빠른 검색이 가능합니다.
인덱스의 크기와 테이블의 크기에 관계없이 빠른 검색이 가능하지만, 검색 범위가 넓을 경우에는 느릴 수 있습니다.

쿼리 실행계획

SQL을 처리하는 최저비용의 경로를 생성해주는 DBMS 내부 핵심엔진인 쿼리 옵티마이저가 쿼리를 수행할 때 생성한 최적의 처리경로를 실행계획(Query Plan)이라고 합니다.
MySQL에서는 실행할 쿼리문 앞에 'EXPLAN' 키워드를 이용해 실행계획에 대한 정보를 살펴 볼 수 있습니다.
이 실행계획을 이용하면 이슈가 발생하는 쿼리에 대한 이해를 도울 뿐만 아니라, 어떻게 최적화할 지에 대한 인사이트를 제공합니다.

힌트

힌트는 옵티마이저의 실행계획을 조작하는 구문을 의미합니다.
옵티마이저가 항상 최적의 실행계획을 찾아줄 수 없으므로 쿼리에 직접적으로 힌트구문 형태의 문법으로 삽입하여 옵티마이저에게 실행 계획을 알려주게 됩니다.

인덱스가 잘 동작하는지 확인하는 방법

  1. 쿼리 실행 계획 확인 : EXPLAN 키워드를 활용하여 실행계획에 대한 정보를 살펴볼수있습니다.
  2. 실행 시간 측정 : 동일한 쿼리를 인덱스를 사용하는 경우와 사용하지 않는 경우를 빅교하여 실행시간을 측정해봅니다.
  3. SQL Profiling 도구 사용: SQL Profiling 도구를 사용하여 쿼리 실행 동안 인덱스 액세스 및 성능을 모니터링하고 분석합니다.

인덱스 사용시 주의해야할점

  1. 다중 열 인덱스(multi-column index)를 사용할 때, 범위 조건(range condition)이 첫 번째 열을 기반으로 하는 경우에는 인덱스를 타게 됩니다. 그러나 이후의 열들은 인덱스를 타지 않습니다.
  2. 인덱스를 사용하여 쿼리를 최적화할 때, 쿼리의 조회 조건을 인덱스된 컬럼을 그대로 사용하는 것이 중요합니다. 쿼리의 조회 조건에서 인덱스된 컬럼을 변형하거나 다른 연산을 적용하면 인덱스의 효과를 상실할 수 있습니다.

GROUP BY 절의 인덱스 사용

GROUP BY 절에 명시된 컬렘의 순서가 인덱스를 구성하는 컬럼의 순서와 같다면 인덱스를 GROUP BY 절에 사용할 수 있습니다. 또한, 인덱스를 구성하는 컬럼 중에 뒤쪽에 있는 컬럼은 GROUP BY절에 명시되지 않아도 인덱스를 사용할 수 있지만 인덱스의 앞쪽에 있는 컬럼이 GROUP BY 절에 명시되지 않으면 인덱스를 사용할 수 없습니다.

이름, 국가, 성별이 있는 테이블에서 인덱스를 어떻게 걸어야할까?

profile
잊지 않기 위해 기록하기

0개의 댓글