ALTER 문으로 인덱스 추가하기 성능 향상
ALTER 문으로 인덱스 추가하기: 성능 향상을 위한 실전 가이드
인덱스(Index)는 데이터 검색 속도를 비약적으로 향상시키는 도구이며, ALTER TABLE 문을 통해 기존 테이블에도 유연하게 추가할 수 있습니다. 이 글에서는 기본 인덱스, 고유 인덱스, 전체 텍스트 인덱스를 추가하는 방법과 그 활용법을 예제와 함께 알아봅니다.
🔧 1. ALTER 문으로 인덱스 추가하기
기본 문법:
ALTER TABLE 테이블명
ADD [인덱스 타입] 인덱스이름 (필드이름);
📌 2. 인덱스 유형별 추가 방법
✅ 2.1. 기본 인덱스 (INDEX)
- 중복 허용, NULL 값 허용
- 자주 조회되는 필드에 추천
ALTER TABLE Reservation
ADD INDEX NameIdx (Name);
✅ 2.2. 고유 인덱스 (UNIQUE INDEX)
- 중복 불가, NULL 허용
- 이메일, 주민등록번호 등 고유한 데이터에 적합
ALTER TABLE Customer
ADD UNIQUE EmailIdx (Email);
✅ 2.3. 전체 텍스트 인덱스 (FULLTEXT INDEX)
- 텍스트 검색 최적화
MyISAM또는InnoDB(MySQL 5.6+)에서만 사용 가능
ALTER TABLE Articles
ADD FULLTEXT ContentFtIdx (Content);
📋 3. 실전 예제
🧪 3.1. 날짜 기반 인덱스
ALTER TABLE Reservation
ADD INDEX ReserveDateIdx (ReserveDate);
→ ReserveDate로 자주 조회되는 쿼리의 속도 향상
🧪 3.2. 복합 인덱스
ALTER TABLE Orders
ADD INDEX OrderIdx (CustomerID, OrderDate);
→ 다중 조건을 포함한 쿼리에 적합
SELECT * FROM Orders
WHERE CustomerID = 10 AND OrderDate >= '2025-01-01';
🧪 3.3. 전체 텍스트 검색
ALTER TABLE Articles
ADD FULLTEXT TitleFtIdx (Title);
SELECT * FROM Articles
WHERE MATCH(Title) AGAINST ('데이터베이스' IN NATURAL LANGUAGE MODE);
→ 뉴스, 블로그, 설명서 등 텍스트 검색 최적화
🔍 4. 인덱스 확인 및 삭제
🔎 인덱스 목록 확인
SHOW INDEX FROM 테이블명;
🗑️ 인덱스 삭제
ALTER TABLE 테이블명
DROP INDEX 인덱스이름;
예시:
ALTER TABLE Reservation
DROP INDEX NameIdx;
⚠️ 5. 주의사항 및 팁
| 항목 | 설명 |
|---|---|
| 성능 영향 | INSERT/UPDATE/DELETE 시 인덱스도 함께 갱신되어 성능 저하 가능 |
| 인덱스 과다 생성 금지 | 너무 많은 인덱스는 오히려 쿼리 처리 속도 감소 및 저장 공간 낭비 |
| FULLTEXT 주의사항 | InnoDB는 MySQL 5.6 이상에서만 FULLTEXT 지원 |
📌 6. 요약
| 구분 | 설명 |
|---|---|
| 기본 인덱스 (INDEX) | 중복 허용, 일반 검색용 |
| 고유 인덱스 (UNIQUE) | 중복 불가, 이메일 등 고유 식별자 필드에 적합 |
| 전체 텍스트 인덱스 (FULLTEXT) | 텍스트 필드 검색 최적화 |
| 추가 방법 | ALTER TABLE 테이블명 ADD [INDEX TYPE] 인덱스명 (필드); |
| 삭제 방법 | ALTER TABLE 테이블명 DROP INDEX 인덱스명; |
질문 정리
❓ 인덱스를 추가하면 무조건 성능이 좋아지나요?
아니요. 검색 성능은 향상되지만, 데이터 삽입·수정·삭제 성능은 저하될 수 있습니다.
❓ 하나의 필드에 여러 인덱스를 추가할 수 있나요?
기본 인덱스와 고유 인덱스는 중복 불가하며, 인덱스는 필드 조합별로 설정 가능합니다.
❓ FULLTEXT는 어떤 테이블에서만 작동하나요?
InnoDB (MySQL 5.6 이상) 또는 MyISAM에서만 동작합니다.
댓글남기기