1 분 소요

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에서만 동작합니다.

카테고리:

업데이트:

댓글남기기