SQL Server 存储过程中间表



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

为了使查询速度更快,我正在考虑将一个大查询拆分为一个存储过程,该过程执行几个联接,存储生成某个临时表,然后将该临时表与另一个临时表联接,该临时表也是几个联接的结果。

我目前正在使用表变量来存储中间表,并且性能明显更好。但在生产中,tempdb似乎遇到了 IO 瓶颈。

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

表变量可能会占用 TempDB 中的大量内存。

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

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

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

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

最新更新