Pau*_*aul 6 t-sql sql-server performance stored-procedures
我有一个将参数传递给SQL中的过程的应用程序。参数之一是表值参数,其中包含要包含在where子句中的项目。
因为当我将TVP连接到具有200万行的表时,表值参数没有附加统计信息,所以查询速度非常慢。
我有什么选择?
同样,目标是将某些值传递给将包含在where子句中的过程:
从table1中选择*,其中id在其中(从@mytvp中选择id)
要么
从table1 t1中选择*在t1.id = tvp.id上加入@mytpv tvp
尽管看起来需要对 table1 中的每一行运行一次查询,但 EXISTS 通常经过优化,比 JOIN 或 IN 更高效。所以,试试这个:
select * from table1 t where exists (select 1 from @mytvp p where t.id=p.id)
Run Code Online (Sandbox Code Playgroud)
另外,请确保 t.id 与 p.id 具有相同的数据类型,并且 t.id 有索引。
| 归档时间: |
|
| 查看次数: |
8172 次 |
| 最近记录: |