2009-06-05 4 views
1

시나리오 :T-SQL 인덱싱 서비스 SQL의 OPENQUERY 최적화

내가 검색을 반환하는 T-SQL 저장된 프로 시저 (SQL Server Management Studio)을 사용하고는 MS 인덱싱 서비스를 사용하여 텍스트 문서에 일치하고이 (간체) 검색어 :

이 쿼리는 며칠 전에 제대로 작동하지 않습니다. 완벽하게 구체화되지는 않았지만, 원하는 문서를 찾을 수 있기 때문에 Property Cache와 Master Index 간의 상호 작용이 제대로 작동하지 않는 것 같습니다.

1) SCOPE 매개 변수를 제거합니다 (즉, "FROM SCOPE) "로 절

2) WHERE 절을 제거하는 (그리고 그대로 SCOPE 기능) 그래서

, 내가 할 수있는 유지 FROM"원하는 단지 내용으로하거나 로케일에 의해 문서가 아니라에서 "찾기 둘 다 함께 사용.

하나의 옵션은 카탈로그를 다시 색인화하는 것이지만, 색인 다시 생성은 현재 최후의 수단으로 사용됩니다.

말했다되는 것을 나는 지정된 범위를 제외 할 쿼리를 재 작성하고 추가 WHERE 절을 포함한다 : 검색 할 때

SELECT * 
FROM openquery( 
    filesystem2, 
    'SELECT 
    Path, Rank, Filename 
    FROM 
    SCOPE() 
    WHERE 
    CONTAINS('' FORMSOF (INFLECTIONAL, "test") '') and 
    Path like ''%e:\test\documents%'' 
    ') b 

이 쿼리가 적절한 문서를 반환합니다. 그러나 필자는 LIKE 키워드를 사용하여 잠재적 인 성능에 대해 우려했습니다. 그래서 각 쿼리의 실행 계획을 조사했지만 정확히 같았습니다 ... 두 가지 중 하나를 말해줍니다 :

1) 인덱싱 서비스의 쿼리 구성 요소는 두 가지 쿼리를 최적화하는 방식으로 쿼리를 최적화합니다 같은.

2) DB 테이블이 참조되지 않을 때 조회 분석기가 원격 조회에 대한 정확한 피드백을 제공하지 않습니다.

질문 (특별한 순서는 없습니다). 누구나 다음에 대한 통찰력을 가지고 있습니까? :

1) 위의 시나리오에서 설명 된 속성 캐시와 마스터 인덱스간에 원래 문제가 발생할 수있는 원인은 무엇입니까?

실행 계획에 관한

2 ),

a) Would the Querying Component process/optimize both queries the same? 

b) Can Sql Server Management Studio provide execution plan feedback for openquery queries that do not reference any DB tables? 

3) 마지막으로,보다 효율적인/빠르고, 왜 어떤 쿼리?

a) i.e. should I use the second one because it solves my problem? 

고맙습니다!

답변

2

null 값이 문제가 될 수 있습니다. 이 정확한 사례에 대해서는 잘 모르겠지만 때로는 "where xxx is not null"을 포함하면 진정한 차이를 만들 수 있습니다.

때때로 다른 옵션을 열기 쿼리 후 테이블에 조건을 넣어 것입니다 select aaa, bbb from openquery(.....) where aaa = zzz. (스타일을 좋게하려면 * 대신 필요한 열을 선택하십시오.

더 효율적이거나 더 빠른 경우 간단한 타이밍 프로세스로 쿼리를 래핑하고 SQL 관리 기본 메시지에서 제공하는 메트릭을 사용할 수없는 경우 사용자 스스로 판단해야 할 수 있습니다.

결국 쿼리가 작동하고 프로젝트에 설정 한 표준을 깨지 않는 한 예 - 사용하십시오.

+0

통찰력을 가져 주셔서 감사합니다. 나는 귀하의 제안을 사용하여 좀 더 질의를 해 보았습니다 ... 그리고 그 솔루션을 사용하기로 결정했습니다. – dda