mssql查询在in子句中有太多参数,速度非常慢

2ul0zpep  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(500)

我有一个带有2000个varchar2类型参数的in子句的查询。我已经按照执行计划申请了所需的索引。它工作得很慢。我在寻找另一种解决办法。我发现的一种方法是使用这些值创建一个临时表,然后使用join进行获取。除了这个还有别的办法吗?我在java中使用springdatajpa/criteria进行查询。提前谢谢。

h7wcgrx3

h7wcgrx31#

直接使用sqlserverbulkcopy或使用usebulkcopyforbatchinsert将值大容量加载到临时表中。
使用表值参数
或者(sql 2016+)将值作为json数组发送。只需创建一个长字符串的形式

["Value1","Value2","Value3"]

并将其作为参数传递给如下查询:

select *
from SomeTable
where SomeColumn in ( select value from openjson(@jsonValues) with (value varchar(200) '$') )

或者用xml做同样的事情。
您也可以使用string\u split,但这也仅在sql 2016+上可用,json更健壮。

相关问题