Search

[권장:성능]선행 와일드카드 LIKE 검색

BAD: 19.584ms, read=1252

선행 와일드카드 LIKE 검색
SELECT m.mbr_id ,m.nick_nm FROM startdbpg.ms_mbr_big m WHERE m.nick_nm LIKE '%Air10%' ;
SQL
복사
실행계획 보기
•
전화번호부에서 '김'으로 시작하는 이름은 바로 펼칠 수 있지만, 이름 중간에 '수'가 들어간 사람은 처음부터 끝까지 넘겨 봐야 합니다.
•
'%Air10%'도 시작 위치를 정할 수 없어서, 회원 10만 건을 모두 읽고 110건만 남겼습니다(Seq Scan).

GOOD: 0.134ms, hit=15

접두어 일치 LIKE 검색
SELECT m.mbr_id ,m.nick_nm FROM startdbpg.ms_mbr_big m WHERE m.nick_nm LIKE 'Air10%' ;
SQL
복사
실행계획 보기
•
'Air10'으로 시작하는 범위('Air10' 이상 'Air11' 미만)만 인덱스로 찾습니다(Index Cond).
•
⚠️ 결과가 같은 건 이 데이터에서만입니다. 요건이 '포함' 검색이라면 이렇게 바꿀 수 없습니다.
💡

KEY POINT

•
LIKE '%검색어%'는 시작 위치를 정할 수 없어 전체를 읽습니다.
•
요건이 '~로 시작'이라면 LIKE '검색어%'로 씁니다.
•
'포함'과 '시작'은 결과가 다릅니다. 바꾸기 전에 업무 요건을 먼저 확인합니다.
✏️

TIP. 포함 검색이 꼭 필요하다면

•
포함 검색이 꼭 필요하고 데이터가 많다면, 일반 인덱스로는 해결되지 않습니다.
•
전용 인덱스(pg_trgm 등)가 필요하니 DBA와 상의합니다.
📖 DEEP DIVE