2011-09-09 64 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 Server使用此列的索引,因此緩慢運行的查詢。理想情況下,您應該更改查詢,以便您的LIKE子句在開始時不使用通配符。

在該WHERE條款包含基於Filename條款第一個AND其查詢的情況下(這是能在這裏使用一個索引,所以這是比較快),然後根據你的productname0條款過濾該降低行集。但是,使用OR時,它不限於僅返回與Filename子句匹配的行,因此它必須搜索整個表以檢查每個productname0字段是否匹配。

1

這是關於改進索引的一篇很好的微軟文章http://msdn.microsoft.com/en-us/library/ms172984.aspx。請參閱有關過濾器子句的索引部分(重申以前的答案)。

您是否嘗試過沿這些行而不是類似的查詢? ('Microsoft Office 2000','Microsoft Office xyz','Whateverelse')產品名稱