답변:
두 번째 (당신이 의미 CONTAINS
하고 실제로 유효한 쿼리에 넣었다고 가정 )는 어떤 형태의 색인 (이 경우 전체 텍스트 색인)을 사용할 수 있기 때문에 더 빠릅니다 . 물론이 쿼리 형식은 열이 전체 텍스트 인덱스 인 경우 에만 사용할 수 있습니다 . 그렇지 않은 경우 첫 번째 양식 만 사용할 수 있습니다.
LIKE를 사용하는 첫 번째 쿼리는 와일드 카드로 시작하기 때문에 인덱스를 사용할 수 없으므로 항상 전체 테이블 스캔이 필요합니다.
CONTAINS
쿼리해야합니다 :
SELECT * FROM table WHERE CONTAINS(Column, 'test');
CONTAINS
합니까? 무엇입니까? 질문의 원래 형태는 Column CONTAIN("%test%",Column)>0
유효에 가까운 곳에 없었습니다. 아직 완전하지 않습니다.
SQL Server 2012 인스턴스에서 두 쿼리를 모두 실행하면 첫 번째 쿼리가 제 경우 가장 빠르다는 것을 확인할 수 있습니다.
LIKE
키워드가 포함 된 쿼리 에 클러스터 된 인덱스 스캔이 표시되었습니다.
은 CONTAINS
또한 전체 텍스트 검색을위한 추가 사업자와 클러스터 인덱스 스캔을했고 병합 조인.
LIKE
선행 와일드 카드가 포함 된 쿼리는 인덱스 부분을 효율적으로 사용할 수 없습니다. 모든 것을 스캔하면됩니다. 의심 할 여지없이 전체 CI 스캔이 전체 텍스트 인덱스를 사용하는 쿼리보다 성능이 더 좋은 상황이있을 수 있지만 (예를 들어, 매우 많은 행이 일치하는 경우) 이는 일반적으로 "확인할 수있는 일부 규칙이 아닌 예외입니다" ".
또한 다음과 같이 변경하십시오.
SELECT * FROM table WHERE Contains(Column, "test") > 0;
이에:
SELECT * FROM table WHERE Contains(Column, '"*test*"') > 0;
전자는 " 이것은 테스트입니다 "및 " 테스트 케이스는 계획입니다 "와 같은 값을 가진 레코드를 찾습니다. .
후자는 또한 " 나는 이것을 테스트하고있다 "그리고 " 이것은 가장 크다 " 와 같은 값을 가진 레코드를 찾을 것이다 .
CONTAINS
' test'와 같은 접두어가 아닌 'test *'와 같은 접두어 용어 만 사용 하고 '* test ' 와 같은 전체 하위 문자열 검색은 언급하지 않습니다 . 그래도 시도하지 않았습니다.