SQL Server存储过程中间表

时间:2011-05-09 21:49:10

标签: sql-server sql-server-2005 stored-procedures

在SQL Server 2005中,我有一个涉及一堆大型连接的查询(每个表都是几千行到几百万行的顺序,表平均可能相当于10-15整数列和日期时间。

为了使查询更快,我正在考虑将一个大查询拆分为一个存储过程,该存储过程执行一些连接,存储导致一些临时表,然后将该临时表与另一个临时表连接起来也是一些加入的结果。

我目前正在使用表变量来存储中间表,而且一次性能明显更好。但在生产中,tempdb似乎有一个IO瓶颈。

有没有更好的方法来考虑解决这样的问题?我的意思是,在这里使用表变量离开基地了吗?

1 个答案:

答案 0 :(得分:0)

表变量在TempDB中占用quite a lot of memory

在大型生产环境中,我看到了比我为此目的使用标准表更好的SQL编码器;它们本质上是临时表,但是它们将它们创建为常规表并为它们提供特殊的前缀或后缀。这具有额外的好处(与临时表一样),能够利用索引来帮助执行。

如果您可以使用标准表或使用复杂执行的所有步骤访问的临时表,则可以解决内存问题。

将其视为缓存数据的地方。实际上,每次运行主存储过程时都可以更新此“缓存”,只需确保使用适当的事务和锁定即可。

想象一下另一种选择 - 如果在存储过程中使用巨大的表变量,并且存储过程同时执行10或20次......那个表变量可能不再仅仅存在于内存中。