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
또한 전체 텍스트 검색을위한 추가 사업자와 클러스터 인덱스 스캔을했고 병합 조인.
또한 다음과 같이 변경하십시오.
SELECT * FROM table WHERE Contains(Column, "test") > 0;
이에:
SELECT * FROM table WHERE Contains(Column, '"*test*"') > 0;
전자는 "
이것은 테스트입니다
"및 "
테스트 케이스는 계획입니다
"와 같은 값을 가진 레코드를 찾습니다 .후자는 또한 "
나는 이것을 테스트하고있다
"그리고 "
이것은 가장 크다
" 와 같은 값을 가진 레코드를 찾을 것이다 .
귀하의 검색어에 대시 ( "-")가 있기 때문에
CONTAINS
더 오래
Merge
걸리고 사용 되었다고 생각 합니다
adventure-works.com
.대시는 중단 단어이므로
CONTAINS
검색 하고 결과를
adventure
검색
works.com
하고 병합하는 것보다 전체 텍스트 색인을 검색했습니다 .참고 URL :
https://stackoverflow.com/questions/7510646/like-vs-contains-on-sql-server
'programing' 카테고리의 다른 글
SQL select join : 모든 열의 접두어를 'prefix. *'로 지정할 수 있습니까? (0) | 2020.05.14 |
---|---|
자바 7 : 경로와 파일 (0) | 2020.05.14 |
유 방향 그래프에서 모든 사이클 찾기 (0) | 2020.05.14 |
JSONDecodeError : 예상 값 : 1 행 1 열 (문자 0) (0) | 2020.05.14 |
같은 구조체에 값과 해당 값에 대한 참조를 저장할 수없는 이유는 무엇입니까? (0) | 2020.05.14 |