SQL Query需要很长时间才能进行参数检查

时间:2017-10-20 01:18:49

标签: sql sql-server

我有一个基于参数检查需要很长时间的SQL查询....

它自身的查询是用于搜索屏幕的存储过程的一部分。基本上你填写一个包含大量文本/组合框的表单来搜索。我有多选组合框,它们将以分隔字段的方式为同一个字段传递多个值。

以下是查询的简化版本,以说明我的问题......

select
    o.id,
    o.createdBy 
into
    #results
from
    jmsTransOther o
where 
    o.(WorkOrderId IN (SELECT intValue FROM dbo.fn_SplitInts(@WorkOrderIds, ',')) <strong>OR @WorkOrderIds = ''</strong>)

我经常使用这个参数检查OR @WorkOrderIds = ''这基本上意味着如果不是这样,那么执行语句的另一面。

这在大多数情况下都能很好地工作,但由于某种原因,这个fn_SplitInts函数基本上将分隔列表转换为表格,然后执行&#34; IN&#34;声明花了很长时间。

此表中有大约200,000条记录 - 目前搜索大约需要40秒。但是,如果我删除参数检查,即OR @WorkOrderIds = '',则需要不到一秒钟。

我可以解决它,但只是想知道这里发生了什么......?

1 个答案:

答案 0 :(得分:0)

我可能会建议这个表述:

select o.id, o.createdBy 
into #results
from jmsTransOther o
where o.WorkOrderId IN (SELECT intValue FROM dbo.fn_SplitInts(@WorkOrderIds, ',')) 
union all
select o.id, o.createdBy 
from jmsTransOther o
where @WorkOrderIds = '';

or可能搞乱了统计数据。 (我也会使用NULL而不是空字符串来表示&#34;所有这些&#34;。)