在SCCM中使用SQL查询查询软件

时间:2011-09-09 16:01:30

标签: sql sccm sccm-2007

我通过查询SCCM数据库在我们的网络中寻找特定的软件。我的问题是,由于各种原因,有时我可以按程序的名称搜索,有时我需要搜索特定的EXE。

当我运行下面的查询时,如果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

谢谢!

2 个答案:

答案 0 :(得分:1)

您的LIKE子句在字符串的开头包含通配符匹配:

LIKE '%office%'

这可以防止SQL Server在此列上使用索引,从而导致查询运行缓慢。理想情况下,您应该更改查询,以便LIKE子句在开始时不使用通配符。

如果WHERE子句首先包含基于AND子句的Filename查询(它可以在这里使用索引,因此这相对较快)并且然后根据您的productname0子句过滤此减少的行集。当您使用OR时,它不仅限于返回与您的Filename子句匹配的行,因此它必须搜索整个表,检查每个productname0字段是否匹配

答案 1 :(得分:1)

这是一篇关于改进索引的微软文章http://msdn.microsoft.com/en-us/library/ms172984.aspx。请参阅带有过滤器子句的索引部分(重申上一个答案。)

您是否尝试过这些行而不是类似的查询?

...('Microsoft Office 2000','Microsoft Office xyz','Whateverelse')中的产品名称