2

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

谢谢!

4

2 回答 2

1

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

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

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

于 2011-12-08T00:36:24.587 回答
1

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

LIKE '%office%'

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

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

于 2011-09-09T16:05:48.237 回答