-1

我有这样的查询

select * 
from MyTable
where (@Param is null or (FieldCode = 'Whatever' and FieldValue like '%' + @Param + '%'))

当我在 where 子句中添加更多语句时,我的查询速度变慢了。我认为这是因为它在 OR 之前评估 AND 部分(其中包含 LIKE,这可能很慢)。如果@Param 为空,我希望它使用AND 跳过查询,我应该怎么做?

4

3 回答 3

0

我强烈建议你检查你的索引,你肯定会错过一个。除此之外,您真的需要使用每一列吗?使用 (NOLOCK) 读取数据。此外,如果您真的需要程序的第一个 % 或者您可以在客户端搜索数据(过滤更大的数据子集),那么对于索引外观来说,like 非常糟糕

于 2013-09-13T11:08:43.967 回答
0

如果@param 为空,您总是可以将其分开并执行不同的选择语句。

If @Param is not null
    select * 
    from MyTable
    where (FieldCode = 'Whatever' and FieldValue like '%' + @Param + '%')
Else
    select *
    from MyTable
于 2013-09-13T11:45:29.263 回答
-1

试试这个以获得更好的性能:

select * 
from MyTable
where @Param is null or case when @Param is not null and FieldCode = 'Whatever' 
then case when FieldValue like '%' + @Param + '%' then 1 end end = 1

这将防止在不必要时进行繁重的通配符比较

于 2013-09-13T11:05:01.557 回答