假设我有一个查询,它将对数百万条记录进行操作。现在,我的 WHERE 子句中有这个,
WHERE Status IN (SELECT VALUE FROM SPLIT(@Status,','))
显然,'SELECT VALUE FROM SPLIT(@Status,',')'将对每一行进行操作。我需要改进这一点。
假设我有一个查询,它将对数百万条记录进行操作。现在,我的 WHERE 子句中有这个,
WHERE Status IN (SELECT VALUE FROM SPLIT(@Status,','))
显然,'SELECT VALUE FROM SPLIT(@Status,',')'将对每一行进行操作。我需要改进这一点。
您可以使用当前的解决方案,也可以将其性能与INNER JOIN
:
SELECT A.*
FROM YourTable A
INNER JOIN SPLIT(@Status,',') B
ON A.Status = B.Value
如何先将SPLIT
函数的结果table variable/temp table
放在首位,然后再INNER JOIN
对此进行处理?
将字符串解压缩到临时表中,然后在查询中使用它。在临时表中的字段上建立索引应该会有所帮助。
create table #Split (Value varchar(10) primary key)
insert into #Split(Value)
select distinct Value
from SPLIT(@Status, ',')
select SomeCol
from YourTable
where Status in (select Value from #Split)
drop table #Split