본문 바로가기
Skills/MsSQL

LIKE, CONTAINS 차이점 및 성능 비교

by Hoseok 2023. 9. 5.
728x90
반응형

SQL Server에서 문자열 검색에 사용되는 방법으로 LIKE와 CONTAINS가 있다.

 

두 가지의 차이점과 성능에 대해서 비교해보자.

 

LIKE

 

SELECT * FROM USER_TB
WHERE UserName LIKE 'Tom' OR UserName LIKE 'Thomas'

 

문자열이 지정된 패턴과 일치하는지 여부를 확인하는 연산자.

열이 인덱싱되지 않아도 된다.

일반 문자나 와일드카드 문자(%, _, [], [^])를 패턴에 사용할 수 있다.

와일드카드 문자를 패턴의 다른 위치에 필요에 따라 사용할 수 있다.

패턴의 앞부분에 와일드카드를 사용하면 어떠한 인덱스도 사용할 수 없으므로, 성능은 느려진다.

비교에 사용되는 패턴은 최대 8000바이트까지의 문자열까지 사용할 수 있다.

 

CONTAINS

 

SELECT * FROM USER_TB
WHERE CONTAINS(UserName, '"Tom" OR "Thomas"')

 

단어, 단어의 접두사, 다른 단어 근처의 단어, 단어의 동의어 등을 검색하는 데 사용되는 술어.
풀 텍스트 인덱스(Full Text Index)가 있는 열에서만 풀 텍스트 검색(Full Text Search)을 사용할 수 있다.
아스테리스크(*)만 와일드카드 문자로 사용할 수 있다.
와일드카드 (*)는 단어나 구문의 에만 사용할 수 있다.

패턴의 끝에만 와일드카드를 사용하기 때문에 Full Text Index를 사용할 수 있고, 성능은 빨라진다.
검색 조건은 nvarchar. 따라서 varchar(max) 및 nvarchar(max)와 같은 큰 문자열은 허용되지 않는다.

 

성능

 

성능 면에서 LIKE는 CONTAINS에 비해 느릴 수 있으며, 특히 패턴의 시작 부분에 와일드카드를 사용하는 경우 인덱스를 사용하지 못하기 때문에 성능은 더욱 안좋아진다.

따라서 풀 텍스트 검색 또는 대용량 데이터베이스에서 문자열 검색을 수행할 때 성능을 고려하는 경우 CONTAINS를 사용하는 것이 좋다. CONTAINS는 특히 풀 텍스트 인덱스를 생성하고 사용하는 경우 검색 성능을 크게 향상시킬 수 있다.

728x90
반응형