sql-server – 表值由于表扫描,参数的性能很慢

我有一个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具有索引.

点赞