我有一个带有2000个varchar2类型参数的in子句的查询。我已经按照执行计划申请了所需的索引。它工作得很慢。我在寻找另一种解决办法。我发现的一种方法是使用这些值创建一个临时表,然后使用join进行获取。除了这个还有别的办法吗?我在java中使用springdatajpa/criteria进行查询。提前谢谢。
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更健壮。
1条答案
按热度按时间h7wcgrx31#
直接使用sqlserverbulkcopy或使用usebulkcopyforbatchinsert将值大容量加载到临时表中。
使用表值参数
或者(sql 2016+)将值作为json数组发送。只需创建一个长字符串的形式
并将其作为参数传递给如下查询:
或者用xml做同样的事情。
您也可以使用string\u split,但这也仅在sql 2016+上可用,json更健壮。