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



我正在通过查询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

谢谢!

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

LIKE '%office%'

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

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

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

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

…where product name in ('Microsoft Office 2000','Microsoft Office xyz','Whateverelse')

相关内容

  • 没有找到相关文章

最新更新