2011-09-09 2 views
2

SCCM 데이터베이스를 쿼리하여 네트워크 전체에서 특정 소프트웨어를 찾고 있습니다. 내 문제는 여러 가지 이유로 때때로 프로그램 이름과 특정 EXE를 검색해야하는 다른 시간으로 검색 할 수 있다는 것입니다.SCCM에서 SQL 쿼리를 사용하여 소프트웨어 쿼리

아래 쿼리를 실행하면 where 절에 AND가 포함되어 있으면 실행하는 데 13 초가 걸리지 만 AND가 OR로 바뀌면 결과가없는 날 동안 실행됩니다. 내가 테이블에 제대로 합류하지 않기 때문에이 일을하고 있다고 가정합니다. 이 문제를 어떻게 해결할 수 있습니까?

select vrs.Name0 
FROM v_r_system as vrs 
join v_GS_INSTALLED_SOFTWARE as VIS on VIS.resourceid = vrs.resourceid 
join v_GS_SoftwareFile as sf on SF.resourceid = vrs.resourceid 

where 
VIS.productname0 LIKE '%office%' AND SF.Filename LIKE 'Office2007%' 

GROUP BY vrs.Name0 

고마워요!

답변

1

귀하의 LIKE 절은 문자열의 시작 부분에 와일드 카드 매치를 포함

LIKE '%office%' 

이이 칼럼에 따라서 실행 속도가 느린 쿼리를 인덱스를 사용하는 SQL 서버를 방지 할 수 있습니다. 이상적으로는 LIKE 절이 처음에 와일드 카드를 사용하지 않도록 쿼리를 변경해야합니다. WHERE 절은 먼저 Filename 절을 기반으로 AND의 질의가 들어있는 경우

(여기에 인덱스를 사용 할 수 있으며, 그래서 이것은 상대적으로 빠른) 다음 productname0 조항에 따라이 감소 된 행 집합을 필터링. 그러나 OR을 사용할 때는 Filename 절과 일치하는 행을 반환하는 것에만 국한되지 않으므로 전체 테이블 검사를 검색하여 각 productname0 필드가 일치하는지 확인해야합니다.

1

인덱스 개선에 대한 Microsoft의 기사 http://msdn.microsoft.com/en-us/library/ms172984.aspx이 있습니다. 필터 절이있는 인덱스에 대한 단원을 참조하십시오 (이전 대답을 반복하십시오).

같은 쿼리 대신이 줄을 따라 뭔가를 시도해 보셨습니까?

... ('Microsoft Office 2000', 'Microsoft Office xyz', 'Whateverelse')의 제품 이름

관련 문제