2011-07-25 21 views
4

我有一个很大的用户定义的表类型变量,它有129 Columns
我将在此变量中一次存储2000-3000 Records,并将其传递给各种存储过程和函数以获取其他数据,并在相同类型的新变量中进行修改,并将此新变量返回给源SP。是因为表类型参数只能作为READONLY传递)。@table变量或#temp表:性能

这是我的算法。

SP1 
    @tmp tableType 
    { 
     INSERT @tmp EXEC 
     SP2 (@tmp) 

     INSERT @tmp EXEC 
     SP3 (@tmp) 

    } 

哪一个,我应该使用@table varible#temp table

回答

3

有一个有用的文章here它说:

像技术等诸多领域,没有“正确”的答案在这里。对于不会超出过程范围的数据,通常在#temp表和表变量之间进行选择。您的最终决定应取决于性能和合理的负载测试。随着数据容量的增大和/或临时数据的重复使用量的增加,您会发现使用#temp表格更有意义。根据您的环境,该阈值可能在任何地方 - 但是如果上述任何限制表示重大障碍,您显然需要使用#temp表。

但是,另一种方法是有真正的表,其中任何事务中使用的所需行都使用GUID列表示。然后你只需要传递GUID作为参数,这可以提高性能。但是,这可能不适合你。

我建议你试试这两个选项,并看看SQL事件探查器,看看哪些选项提供最佳性能。

1

如果#tmp将被简单地用作堆暂时存储数据,然后我不认为@#VS会有所作为,特别是对一张只包含几千行的表格。

唯一要记住的是,如果在某些时候你认为你需要索引表,那么临时表显然是选择,因为表变量不能被索引。除此之外,我从来没有发现临时表超过表变量,反之亦然。