1

假设我有一个查询,它将对数百万条记录进行操作。现在,我的 WHERE 子句中有这个,

WHERE Status IN (SELECT VALUE FROM SPLIT(@Status,','))

显然,'SELECT VALUE FROM SPLIT(@Status,',')'将对每一行进行操作。我需要改进这一点。

4

3 回答 3

1

您可以使用当前的解决方案,也可以将其性能与INNER JOIN

SELECT A.*
FROM YourTable A
INNER JOIN SPLIT(@Status,',') B
ON A.Status = B.Value
于 2012-05-28T05:26:11.013 回答
1

如何先将SPLIT函数的结果table variable/temp table放在首位,然后再INNER JOIN对此进行处理?

于 2012-05-28T05:26:17.673 回答
1

将字符串解压缩到临时表中,然后在查询中使用它。在临时表中的字段上建立索引应该会有所帮助。

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
于 2012-05-28T05:27:27.377 回答