SQL Server에서의 LIKE vs Contains
다음 중 어떤 쿼리가 더 빠릅니까(LIKE vs Contains)?
SELECT * FROM table WHERE Column LIKE '%test%';
또는
SELECT * FROM table WHERE Contains(Column, "test");
두 번째(를 의미한다고 가정하고 실제로 유효한 쿼리에 포함)는 어떤 형식의 인덱스(이 경우 전체 텍스트 인덱스)를 사용할 수 있으므로 더 빨라야 합니다.물론 이 쿼리 형식은 열이 전체 텍스트 색인에 있는 경우에만 사용할 수 있습니다.그렇지 않으면 첫 번째 양식만 사용할 수 있습니다.
LIKE를 사용하는 첫 번째 쿼리는 와일드카드로 시작하므로 인덱스를 사용할 수 없으므로 항상 전체 테이블 검색이 필요합니다.
그CONTAINS
쿼리는 다음과 같습니다.
SELECT * FROM table WHERE CONTAINS(Column, 'test');
SQL Server 2012 인스턴스에서 두 쿼리를 모두 실행하면 첫 번째 쿼리가 가장 빨랐음을 확인할 수 있습니다.
를 사용한 쿼리LIKE
키워드는 클러스터화된 인덱스스캔을 나타냅니다.
그CONTAINS
또한 전체 텍스트 일치 및 병합 조인을 위해 추가 연산자를 사용하여 클러스터된 인덱스 스캔을 수행했습니다.
그런 것 같아요CONTAINS
더 오래 걸리고 더 많이 사용됨Merge
쿼리에 대시(-)가 붙어있기 때문입니다.adventure-works.com
.
대시는 줄임말이기 때문에CONTAINS
전체 텍스트 색인 검색adventure
검색한 것보다works.com
결과를 통합했습니다.
여기서도 변경해 보겠습니다.
SELECT * FROM table WHERE Contains(Column, "test") > 0;
이를 위해:
SELECT * FROM table WHERE Contains(Column, '"*test*"') > 0;
전자는 "이것은 테스트" 및 "테스트 케이스가 계획"과 같은 값을 가진 기록을 찾습니다.
후자는 또한 "I am testing this" 및 "this is greatest"와 같은 값을 가진 레코드를 찾습니다.
"Contains" 키워드가 무슨 뜻인지 잘 모르겠어요.컬럼에 전체 텍스트 색인을 설정합니다.테이블에서 몇 가지 쿼리를 실행했습니다.Like는 450.518 행을 반환하지만 포함되지 않으며 Like의 결과가 정확합니다.
SELECT COL FROM TBL WHERE COL LIKE '%41%' --450.518 rows
SELECT COL FROM TBL WHERE CONTAINS(COL,N'41') ---40 rows
SELECT COL FROM TBL WHERE CONTAINS(COL,N'"*41*"') -- 220.364 rows
언급URL : https://stackoverflow.com/questions/7510646/like-vs-contains-on-sql-server
'programing' 카테고리의 다른 글
인덱스에서 열의 순서가 얼마나 중요합니까? (0) | 2023.04.07 |
---|---|
두 열의 조합에 고유한 제약 조건 추가 (0) | 2023.04.07 |
SQL varchar에서 특정 하위 문자열의 발생 횟수를 어떻게 계산합니까? (0) | 2023.04.07 |
C#을 사용하여 텍스트에 탭 문자 삽입 (0) | 2023.04.07 |
SQL 서버에서 행을 열로 효율적으로 변환 (0) | 2023.04.07 |