加入表值函数会降低查询速度

时间:2016-01-01 00:19:20

标签: sql-server-2008 sql-execution-plan

properties: { startPoint: Number, locationPoint: Number, ... 是350k行。 Orders是20k行。 Users是2k行。 Reflinks是40k ids。 @p0分割SplitIds(@p0)并返回@p0。看起来它会立即执行。

第一个TABLE(Id INT NOT NULL PRIMARY KEY)立即执行并返回7.5k行。它的执行计划完全基于' Hash Match'块。

第二个SELECT执行120秒并返回相同的7.5k行。它的执行平面相同,但基于SELECT块。

是否有可能以某种方式加快第二个查询?我的任务是明确指定输入订单列表,这就是我创建Nested Loop的原因。如果您知道如何在没有SplitIds的情况下执行此操作 - 您的想法也将受到赞赏。

SplitIds

1 个答案:

答案 0 :(得分:2)

如果您愿意使用临时表,则可以将Container中的结果存储在正确索引的临时表中,然后使用它来执行第二个查询。这肯定会加快速度,因为SQL Server将能够为查询创建更好的执行计划。

SplitIds