문제

대본:

T-SQL 저장된 Proc (SQL Server Management Studio)를 사용하여 MS Indexing Service 와이 (단순화 된) 쿼리를 사용하여 텍스트 문서의 검색 일치를 반환합니다.

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

이 쿼리는 며칠 전에 제대로 작동하지 않았습니다. 완전히 입증되지는 않았지만 속성 캐시와 마스터 인덱스 간의 상호 작용은 원하는 문서를 찾을 수 있기 때문에 제대로 작동하지 않는 것 같습니다.

1) 스코프 매개 변수 제거 (즉, From Claus

2) where 절을 제거하고 (그리고 범위 기능을 그대로 유지)

따라서 만족이나 로케일만으로 원하는 문서를 "찾아"할 수는 있지만 둘 다 함께 사용하지는 않습니다.

한 가지 옵션은 카탈로그를 다시 인덱싱하는 것이지만, 현재는 최후의 수단의 옵션 일뿐입니다.

즉, 지정된 범위를 제외하기 위해 쿼리를 다시 작성하고 추가 WHER 절을 포함합니다.

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?

고맙습니다!

도움이 되었습니까?

해결책

없는 값은 문제 일 수 있습니다. 이 정확한 경우에 대해서는 확실하지 않지만 때로는 "where xxx is not null"진정한 차이를 만들 수 있습니다.

또 다른 옵션은 때때로 열린 쿼리 후에 테이블에있는 위치를 두는 것입니다.select aaa, bbb from openquery(.....) where aaa = zzz. (더 나은 스타일을 보려면 *대신 필요한 열을 선택하십시오.

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

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top