0

我正在尝试为搜索实现 sql 查询,并且我需要能够搜索许多字段,但它们都是可选的。我通过以下方式实现了查询:

SELECT --<some fields>
FROM --<some tables>
WHERE   ((@param1 IS NULL) OR ([FirstName] = @param1))
        AND((@param2 IS NULL) OR ([Surname] = @param2))
        AND((@param3 IS NULL) OR ([CompanyName] = @param3))

但我发现现在我有大约 6 个参数,即使它们都为空,查询的执行时间也太长了。

我不喜欢执行动态 sql,只添加基于参数所需的 sql 条件。有什么方法可以优化此查询以确保它没有执行所有条件逻辑?

仅供参考,我不认为速度问题归结于索引,因为我查看了执行计划并且它正在运行索引扫描而不是表扫描或查找。

4

1 回答 1

2

听起来像参数嗅探。

尝试重建索引并更新统计信息

如果问题仍然存在,您可以OPTION(RECOMPILE)在整个语句中添加一个,或者使用OPTIMIZE FOR来提示该过程在查询计划方面应该做什么。

[顺便说一句:聚集索引扫描是表扫描。]

规范参考是:T-SQL 中的动态搜索条件

于 2013-08-19T11:06:48.007 回答