이종관
Back to Posts

PostgreSQL vs MySQL 인덱싱 비교

인덱스 타입, 부분 인덱스, Full Text Search, JSON 인덱싱 차이

2025년 1월 14일·4 min read·
data
postgresql
mysql
database
indexing
performance

지원 인덱스 타입 비교

PostgreSQL

인덱스용도
B-Tree기본 인덱스, 비교 연산 최적화
Hash동등 연산(=) 빠른 비교
GINFull Text Search, JSONB, 배열 검색
GiST지리 정보(PostGIS), 범위 타입
BRIN대용량 시계열/순차 데이터
SP-GiST트라이 기반 공간 분할

MySQL (InnoDB)

인덱스용도
B-Tree기본 인덱스, 대부분의 경우
HashAdaptive Hash Index (내부 최적화용)
FULLTEXT텍스트 검색
R-TreeGIS 기능 (8.0+)

부분 인덱스 & 표현식 인덱스

PostgreSQL - Partial Index

일부 데이터만 인덱싱하여 디스크 사용량과 유지 비용 절감:

-- status='ACTIVE'인 행만 인덱스
CREATE INDEX idx_active_users ON users(email)
WHERE status = 'ACTIVE';

PostgreSQL - Expression Index

함수나 표현식 결과를 기반으로 인덱스 생성:

-- 대소문자 구분 없이 검색
CREATE INDEX idx_lower_name ON users((LOWER(name)));

-- JSON 특정 키만 인덱싱
CREATE INDEX idx_json_email ON users((data->>'email'));

MySQL의 한계

  • 부분 인덱스: 조건 기반 부분 인덱스 미지원 (접두사 인덱스만 가능)
  • 표현식 인덱스: 8.0.13+ 제한적 지원
-- MySQL 접두사 인덱스
CREATE INDEX idx_name ON users(name(10));

-- MySQL 8.0+ 함수 기반 인덱스
CREATE INDEX idx_lower ON users((LOWER(name)));

Full Text Search & JSON 인덱싱

PostgreSQL

GIN 인덱스로 고급 텍스트 검색과 JSONB 인덱싱:

-- Full Text Search
CREATE INDEX idx_fts ON articles USING GIN(to_tsvector('korean', content));

-- JSONB 인덱싱
CREATE INDEX idx_jsonb ON users USING GIN(metadata jsonb_path_ops);
  • 다양한 언어별 토큰화, 불용어 처리
  • JSONB 전체 구조 역색인화 가능

MySQL

-- FULLTEXT 인덱스
CREATE FULLTEXT INDEX idx_content ON articles(content);

-- JSON 경로 인덱스 (8.0+)
CREATE INDEX idx_json ON users((CAST(data->>'$.email' AS CHAR(255))));
  • 자연어 검색, Boolean 모드 지원
  • JSON 전체 구조 인덱싱은 제한적

동시성 및 인덱스 관리

PostgreSQL

-- 서비스 중단 없이 인덱스 생성
CREATE INDEX CONCURRENTLY idx_name ON users(name);

-- 인덱스 재구성
REINDEX INDEX idx_name;

MySQL

-- 온라인 DDL (일부 작업 제한)
ALTER TABLE users ADD INDEX idx_name(name), ALGORITHM=INPLACE, LOCK=NONE;

성능 최적화 포인트

항목PostgreSQLMySQL
B-Tree기본 지원기본 지원
부분 인덱스조건 기반 가능미지원
표현식 인덱스자유로움8.0+ 제한적
텍스트 검색GIN + 고급 기능FULLTEXT 기본
JSONGIN 역색인경로 기반 제한적

정리

PostgreSQL은 인덱싱 기능이 매우 다양하고 복잡한 시나리오에 대응하기 좋습니다.

MySQL은 일반적인 B-Tree 인덱스로 범위/동등 조건 쿼리를 빠르게 처리하지만, 고급 인덱스 기법에서는 제약이 있습니다.

데이터 특성과 쿼리 패턴에 따라 적절한 DBMS와 인덱스 전략을 선택하세요.