데이터베이스에서 인덱스를 적절히 활용하면 SQL 성능이 비약적으로 향상될 수 있습니다!
인덱스의 개념부터 권장 설정 방법까지 알아보겠습니다.🤓
인덱스(Index)는 데이터를 효율적으로 검색하고 쿼리 성능을 최적화하기 위해 사용하는 자료 구조입니다.
도서관의 책 목차 또는 사전의 단어 찾기 방식과 유사합니다.
[동작 방식]
(예제)
-- 인덱스 없이 검색 (느림, Full Table Scan 발생)
SELECT * FROM employees WHERE name = 'amugae';
-- 인덱스를 사용하여 검색 최적화 (빠름, Index Scan 수행)
CREATE INDEX idx_employee_name ON employees(name);
SELECT * FROM employees WHERE name = 'amugae';
기본 인덱스 (B-TREE)
CREATE INDEX 인덱스명 ON 테이블명(컬럼명);
복합(Composite) 인덱스 (두 개 이상의 컬럼 포함)
CREATE INDEX 인덱스명 ON 테이블명(컬럼명1, 컬럼명2);
함수 기반(Function-Based) 인덱스 (Oracle)
CREATE INDEX 인덱스명 ON 테이블명(LOWER(컬럼명));
BITMAP INDEX (Oracle)
CREATE BITMAP INDEX 인덱스명 ON 테이블명(컬럼명);
CLUSTERED INDEX (MSSQL)
CREATE CLUSTERED INDEX 인덱스명 ON 테이블명(컬럼명);
인덱스 재구성
ALTER INDEX 인덱스명 REBUILD;
인덱스 이름 변경 (MSSQL)
SP_RENAME '기존 인덱스명', '변경할 인덱스명', 'INDEX';
DROP INDEX 테이블명.인덱스명;
1) 인덱스가 많다고 무조건 좋은 게 아닌 것을 명심하기
2) 자주 변경되는 컬럼에는 인덱스 사용 주의하기
3) LIKE '%문자%' 검색에서는 B-Tree 인덱스가 비효율적 → FULLTEXT INDEX 활용
4) 작은 테이블에서는 인덱스가 불필요할 수도 있다.
1) WHERE, JOIN, ORDER BY에 자주 사용되는 컬럼에 인덱스 추가
2) 데이터 변경이 많은 컬럼은 인덱스를 최소화
3) 테이블의 크기와 조회 패턴을 분석 후 인덱스 추가
4) 인덱스 재구성으로 성능 유지 관리
5) 불필요한 인덱스는 제거하여 유지 비용 최소화
인덱스는 SQL 성능 최적화에서 필수적인 요소이지만, 잘못 사용하면 오히려 성능 저하를 초래할 수 있습니다.
효율적인 인덱스 활용을 위해 꼭 필요한 컬럼에만 적용하고, 주기적으로 성능을 점검하는 것이 중요합니다.