我有一个aplication将参数传递给SQL中的过程.其中一个参数是一个表值参数,其中包含要包含在where子句中的项.
因为当我将TVP连接到具有2密耳行的表时,表值参数没有附加统计信息,所以我得到一个非常慢的查询.
我有什么替代品?
同样,目标是将某些值传递给将包含在where子句中的过程:
select * from table1 where id in
(select id from @mytvp)
要么
select * from table1 t1 join @mytpv
tvp on t1.id = tvp.id
最佳答案 虽然看起来它需要为table1中的每一行运行一次查询,但EXISTS通常优化为比JOIN或IN更有效.所以,试试这个:
select * from table1 t where exists (select 1 from @mytvp p where t.id=p.id)
另外,请确保t.id与p.id的数据类型相同,并且t.id具有索引.