2024. 8. 6. 18:56ㆍDBMS/PERFORMANCE
1. 커버링 인덱스 (Covering Index)
- 커버링 인덱스는 쿼리에서 필요한 모든 컬럼을 포함하여, 쿼리가 인덱스만으로도 필요한 데이터를 모두 처리할 수 있게 하는 인덱스를 말한다. 즉, 테이블 데이터에 접근하지 않고도 인덱스만으로 쿼리를 완전히 해결할 수 있다.
- 장점: 커버링 인덱스를 사용하면 데이터베이스 엔진이 테이블의 데이터를 읽지 않고, 인덱스에서 직접 데이터를 조회할 수 있어 쿼리 성능이 크게 향상된다.
CREATE INDEX idx_employee_cover ON employees(last_name, first_name, department_id);
위의 인덱스는 last_name, first_name, department_id 컬럼을 포함한다.
SELECT last_name, first_name, department_id
FROM employees
WHERE last_name = 'Smith';
이 쿼리는 last_name, first_name, department_id를 조회하기 때문에, 인덱스 idx_employee_cover만으로 데이터를 처리하여 테이블을 스캔할 필요 없이 인덱스만으로 쿼리를 해결한다.
2. 부분 인덱스 (Partial Index)
- 부분 인덱스는 특정 조건을 만족하는 행에만 인덱스를 적용하는 방식이다. 일반적인 인덱스와 달리, 부분 인덱스는 WHERE 절에 정의된 조건을 만족하는 데이터에만 인덱스를 생성한다. 이를 통해 인덱스 크기를 줄이고 성능을 최적화할 수 있다.
- 장점: 전체 데이터에 인덱스를 생성하는 대신 특정 조건을 만족하는 데이터에만 인덱스를 적용하기 때문에, 저장 공간을 절약하고 인덱스 관리 비용을 줄이며, 쿼리 성능을 최적화할 수 있다.
CREATE INDEX idx_employee_active ON employees(last_name) WHERE status = 'active';
위의 인덱스는 status가 'active'인 행에 대해서만 last_name 컬럼에 인덱스를 생성한다.
SELECT last_name
FROM employees
WHERE status = 'active';
이 쿼리는 status = 'active' 조건을 포함하고 있기 때문에, idx_employee_active 인덱스를 사용하여 성능이 최적화된다. 해당 인덱스는 'active' 상태의 데이터만 포함하므로, 불필요한 데이터에 대해 인덱스가 생성되지 않아 인덱스 크기와 검색 성능이 최적화된다.
3. 복합 인덱스(Composite Index)
복합 인덱스는 데이터베이스에서 두 개 이상의 컬럼을 결합하여 만든 인덱스로 여러 조건이 결합된 쿼리의 성능을 크게 향상시킬 수 있다.
CREATE INDEX idx_employee_name_dept ON employees(last_name, first_name, department_id);
- 검색 성능 향상: 쿼리가 여러 조건을 포함할 때, 복합 인덱스를 사용하면 해당 조건들을 빠르게 검색할 수 있다.
- 멀티 컬럼 검색 최적화: 복합 인덱스는 여러 컬럼에 대한 검색을 효율적으로 수행할 수 있게 해준다. 예를 들어, last_name, first_name, department_id을 모두 조건으로 사용하는 쿼리에서 효율적이다.
SELECT last_name, first_name
FROM employees
WHERE last_name = 'Smith'
AND department_id = 5;
위 쿼리는 employees 테이블에서 last_name이 'Smith'이고 department_id가 5인 행을 검색한다. 복합 인덱스가 생성되어 있다면, 데이터베이스는 last_name과 department_id를 결합하여 검색 작업을 최적화할 수 있다.
복합 인덱스 사용 시 주의사항
- 컬럼 순서 중요성: 복합 인덱스에서 컬럼의 순서가 매우 중요한다. 인덱스는 첫 번째 컬럼부터 차례로 정렬되어 있기 때문에, 인덱스를 사용할 때 쿼리 조건에서 첫 번째 컬럼이 반드시 포함되어야 효과를 볼 수 있다.
- 불필요한 인덱스 남발 주의: 인덱스는 성능을 향상시키지만, 너무 많은 인덱스는 오히려 데이터 삽입, 삭제, 업데이트 시 성능을 저하시킬 수 있다. 필요에 따라 적절한 인덱스 설계가 필요한다.
'DBMS > PERFORMANCE' 카테고리의 다른 글
튜닝 (0) | 2024.08.06 |
---|---|
INDEX TUNNING (0) | 2024.07.08 |
데이터 정합성 for update (0) | 2024.07.03 |
B-tree index structure (0) | 2024.07.03 |
ROWNUM - COUNT STOPKEY (0) | 2024.04.19 |