SQL Academy · 강의

트라이그램 검색(pg_trgm)으로 퍼지 매칭하기

pg_trgm 확장 기능과 GiST/GIN 트라이그램 인덱스, similarity()를 사용해 유사한 문자열을 찾아보세요.

레슨 1/414개 단계

트라이그램 검색(pg_trgm)으로 퍼지 매칭하기은(는) CoddyKit의 무료 SQL Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 SQL Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

트라이그램을 사용하는 이유

LIKE %word%는 B-tree 인덱스를 사용할 수 없습니다. 트라이그램(“3글자 부분 문자열”)을 GIN/GiST와 함께 사용하면 퍼지 검색과 부분 문자열 검색을 빠르게 수행할 수 있습니다.

확장 기능 활성화

pg_trgm은 PostgreSQL contrib에 포함되어 제공됩니다:

CREATE EXTENSION IF NOT EXISTS pg_trgm;

단어의 트라이그램

문자열의 트라이그램을 표시합니다:

SELECT show_trgm('database');
-- {dat, aba, atab, tab, abas, base, ase, ...}

유사도 함수

[0..1] 범위의 실수입니다:

SELECT similarity('database', 'datbase');     -- ~0.75
SELECT similarity('hello', 'world');             -- ~0.0

% 연산자

유사도가 임계값(기본값 0.3)보다 높으면 true를 반환합니다:

SELECT 'database' % 'datbase';      -- t
SET pg_trgm.similarity_threshold = 0.4;

부분 문자열 검색용 인덱스

GIN 트라이그램 인덱스를 사용하면 LIKE '%word%'가 빨라집니다:

CREATE INDEX users_name_trgm ON users USING GIN (full_name gin_trgm_ops);

-- Now this is index-supported:
SELECT * FROM users WHERE full_name ILIKE '%ali%';

GiST와 GIN 비교

  • GIN — 읽기가 빠르고, 쓰기가 느리며, 인덱스가 큽니다.
  • GiST — 쓰기가 빠르고, 읽기가 느리며, 인덱스가 작습니다.

대부분의 팀은 퍼지 검색에 GIN을 선택합니다.

퍼지 일치 query

오타가 있어도 유사한 문자열을 찾습니다:

SELECT full_name, similarity(full_name, 'datbase') AS sim
FROM users
WHERE full_name % 'datbase'
ORDER BY sim DESC
LIMIT 10;

순위 지정을 위한 거리

<-> 연산자는 거리(1 - 유사도)를 반환하므로 distance ASC로 ORDER BY할 수 있습니다:

SELECT full_name
FROM users
WHERE full_name % 'alice'
ORDER BY full_name <-> 'alice'
LIMIT 10;

트라이그램으로 자동 완성

pg_trgm을 LIKE 접두사 조건과 결합하면 빠른 자동 완성을 구현할 수 있습니다:

SELECT name
FROM products
WHERE name % $1
   OR name ILIKE $1 || '%'
ORDER BY similarity(name, $1) DESC
LIMIT 8;

트라이그램의 한계

트라이그램은 입력의 문자 체계를 기준으로 작동합니다. CJK 언어에는 다른 토큰화 방식이 필요합니다. 완전한 자연어 검색에는 tsvector + GIN을 사용합니다.

다른 인덱스와 결합하기

여러 필터가 있는 query는 Bitmap And를 통해 트라이그램 인덱스와 B-tree를 함께 사용할 수 있습니다:

EXPLAIN ANALYZE
SELECT * FROM users
WHERE full_name ILIKE '%ali%' AND country = 'US';

요약

pg_trgm은 “선행 와일드카드” 문제를 해결합니다.

  • GIN 트라이그램 인덱스 → 빠른 LIKE %x%
  • % 연산자와 similarity()를 사용한 퍼지 일치
  • <-> 거리 연산자를 사용한 순위 지정
  • 자동 완성과 오타 허용 검색에 매우 적합

빠른 확인

일반 B-tree 인덱스는 왜 WHERE name LIKE '%alice%'를 사용할 때 도움이 되지 않습니까?

무료로 시작

AI 튜터와 함께 SQL을(를) 배우세요 — 무료

브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.

코스
46
레슨
183

자주 묻는 질문

“트라이그램 검색(pg_trgm)으로 퍼지 매칭하기” 강의는 무료인가요?

네 — “트라이그램 검색(pg_trgm)으로 퍼지 매칭하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 SQL Academy 강의 전체를 잠금 해제할 수 있습니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“트라이그램 검색(pg_trgm)으로 퍼지 매칭하기”에서 뭘 배우나요?

pg_trgm 확장 기능과 GiST/GIN 트라이그램 인덱스, similarity()를 사용해 유사한 문자열을 찾아보세요. 브라우저에서 직접 실행하는 실습 코드로 SQL Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

SQL Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 SQL Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“트라이그램 검색(pg_trgm)으로 퍼지 매칭하기” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 SQL Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 SQL Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 트라이그램 검색(pg_trgm)으로 퍼지 매칭하기
  2. tsvector와 GIN을 활용한 전문 검색
  3. PostGIS를 활용한 공간 인덱싱
  4. pgvector를 활용한 벡터 검색
← SQL Academy(으)로 돌아가기