2012-11-14 2 views
1

안녕하세요. CONTAINSTABLE을 사용하는 테이블 열을 검색하고 있습니다. 문제는 성능입니다. 이 내 쿼리입니다 : (문서 테이블이 거대한 때문에) 전체 테이블 검색을 피하기 위해 CONTAINSTABLE 검색을 제한하십시오.

SELECT count(*) 
FROM dbo.Document d 
INNER JOIN dbo.DocuemntVehicleXRef vx ON (vx.DocuemntID = d.DocumentID) 
INNER JOIN CONTAINSTABLE (Document , QueryContent , @searchterm) ftt ON (d.DocumentID = ftt.[Key]) 
WHERE vx.VehicleId = @vehicleId 

그래서 성능을 향상시킬 수 있습니다. 나는 나머지 dboose가 불필요하게 있기 때문에 VehicleId에 묶인 Documents 위로 만 모든 dbo.Docuemnt 테이블 대신 CONTAINSTABLE 함수를 수행해야합니다. 해결 방법이 있습니까? 감사합니다.

답변

1

한 가지 방법은 각각이 문서의 하위 집합을 반환하는 여러 개의 인덱싱 된 뷰를 만드는 것입니다. 각 뷰는 고유 한 ft 인덱스를 가지며 관련 뷰에서 선택하도록 쿼리 로직을 관리합니다. 이 접근법은 테이블이 계층 적 카테고리 구조와 같이 일반적으로 사용되는 청크로 쉽게 분할 될 수있는 경우에 유용합니다.

또 다른 접근법은 고유 한 키를 추가하여 색인 된 텍스트를 "폐기"하는 것입니다. 예 : "VEHICLEID001"그런 다음 다른 키워드와 함께 "VEHICLEID001"을 검색 할 수 있습니다. 이 접근법은 마이크로 소프트에 의해 반 연습으로 싫은 일이지만 작동합니다.

+0

이 낡은 질문을 되살려 죄송합니다. 그러나이 질문에 대한 답변은 반박입니까? 필자는 2007 년부터 임베디드 필터 사용을 제안하는이 기사를 발견했습니다. https://technet.microsoft.com/en-gb/library/cc917695.aspx#Embedding_Filter – EventHorizon

+0

https://msdn.microsoft.com/en-us/library/ cc721269.aspx # _Toc202506250 성능 향상 섹션. "SQL Server 2000 및 2005에서 관계형 카디널리티가 전체 텍스트보다 훨씬 낮은 일부 시나리오에 대한 유효한 해결 방법은 관계형 열의 내용을 전체 텍스트 인덱스로 밀어 넣는 것이 었습니다." – StrayCatDBA

관련 문제