DB

[MySQL] 인덱스 종류 완전정복 (BTREE, HASH, FULLTEXT, SPATIAL)🧩

인생아 2025. 7. 3. 20:37
반응형

MySQL에서 인덱스(Index)는 단순히 하나의 구조만 있는 게 아니다. 목적에 따라 다양한 인덱스 타입이 존재하며, 각 인덱스마다 용도와 성능 특성이 다르다.

🌳 BTREE 인덱스 – 가장 기본이자 널리 쓰이는 인덱스

BTREE 인덱스는 MySQL의 기본 인덱스 방식이며, 대부분의 경우 자동으로 적용된다.

특징

  • 범위 검색에 강하다 (BETWEEN, <, >, LIKE 'abc%' 등)
  • ORDER BY, GROUP BY, JOIN 등에 자주 활용됨
  • InnoDB, MyISAM 모두 지원

예제

CREATE INDEX idx_name ON users(name);
SELECT * FROM users WHERE name LIKE 'Kim%';

주의

  • LIKE '%abc'처럼 앞에 와일드카드가 있을 경우 인덱스가 무시
반응형

⚡ HASH 인덱스 – 동등 조건(=)에 특화된 인덱스

HASH 인덱스는 메모리 기반의 MEMORY 엔진에서 사용되며, 빠른 검색에 특화되어 있다.

특징

  • = 비교 연산에 매우 빠르다
  • 범위 검색은 지원하지 않음
  • MEMORY 스토리지 엔진에서만 사용 가능

예제

CREATE TABLE temp_users (
  id INT,
  name VARCHAR(100),
  INDEX USING HASH (name)
) ENGINE=MEMORY;

적합한 상황

  • 캐시 테이블, 세션 테이블 등 정확한 키 검색이 잦은 구조

📝 FULLTEXT 인덱스 – 텍스트 검색을 위한 전문 인덱스

FULLTEXT 인덱스자연어 기반 텍스트 검색에 특화된 인덱스이다. InnoDB, MyISAM 엔진에서 모두 지원한다.

특징

  • 긴 텍스트에서 키워드 기반 검색 가능
  • MATCH() ... AGAINST() 구문 사용
  • VARCHAR, TEXT 컬럼에만 적용 가능

예제

CREATE TABLE articles (
  id INT AUTO_INCREMENT PRIMARY KEY,
  content TEXT,
  FULLTEXT (content)
);

SELECT * 
FROM articles 
WHERE MATCH(content) AGAINST('database optimization');

주의

  • 기본 설정에서는 3자 이하 단어는 검색되지 않으며, 불용어(stopword)는 무시된다
반응형

🗺️ SPATIAL 인덱스 – 공간(지리) 데이터 검색

SPATIAL 인덱스는 위치, 좌표 등 공간 데이터(GIS)를 처리하기 위한 인덱스다. MyISAM, InnoDB에서 지원되며, GEOMETRY 타입과 함께 사용한다.

특징

  • 2차원 공간 검색 최적화
  • 공간 관계(교차, 포함 등)를 빠르게 판단
  • ST_Contains(), MBRWithin() 같은 함수와 함께 사용

예제

CREATE TABLE places (
  id INT PRIMARY KEY,
  location POINT NOT NULL,
  SPATIAL INDEX(location)
);

활용 분야

  • 지도 기반 검색 서비스
  • 근처 상점 찾기, 배달 반경 필터링 등

📊 인덱스 타입 요약 비교

인덱스 종류 지원 엔진 특징 범위 검색 전문 검색
BTREE InnoDB, MyISAM 범용, 기본 인덱스 ✅ 가능 ❌ 불가
HASH MEMORY 정확한 일치 빠름 ❌ 불가 ❌ 불가
FULLTEXT InnoDB, MyISAM 자연어 검색 ❌ 불가 ✅ 가능
SPATIAL InnoDB, MyISAM 위치 기반 검색 ✅ 가능 ❌ 불가
반응형

⚠️ 인덱스 선택 시 주의사항

  • 인덱스를 잘못 사용하면 성능 저하 발생
  • 잘못된 WHERE 조건, 함수 사용, 컬럼 순서 변경 등이 인덱스를 무력화할 수 있음
  • EXPLAIN으로 항상 쿼리 성능 확인 필수

📌 마무리 요약

  • BTREE 인덱스: 범용적이고 대부분의 조건에 적합
  • HASH 인덱스: = 검색에 최적화, 범위 검색은 불가
  • FULLTEXT 인덱스: 자연어 텍스트 분석에 특화
  • SPATIAL 인덱스: 지도, 위치 기반 서비스에서 활용

인덱스를 제대로 이해하고 선택하면 데이터베이스 성능이 극적으로 향상될 수 있다. 상황에 따라 올바른 인덱스를 선택하자.

🔗 참고한 공식 문서

MySQL Index Types:
https://dev.mysql.com/doc/refman/8.0/en/mysql-indexes.html

반응형