2017-06-13 115 views
0

在对具有相同记录数(〜5000万)的这些表执行批量插入操作时,观察到#temp表与物理(实际)表之间的性能差异。SQL临时表与物理(实际)表的性能

使用(Insert into ... select)查询,临时表需要大约3分钟,物理表需要大约8分钟。

这里,物理表与临时表完全相同(物理表没有集群和非集群索引)。

为什么临时表预成形比物理表更有效率和更好?有没有人有一些背景吗?

+1

也许临时表空间位于一组更高效的磁盘上。 –

+0

您比较了执行计划吗?你的表*真的* 100%相同,直到确切的数据类型和长度(在char/varchar的情况下)? – alroc

+0

检查为您的数据库设置了哪种恢复模式。最有可能的是,它是'充分'的。 Tempdb始终处于“简单”模式,这意味着批量操作的记录最少。与“完全”模式相比,这可以降低事务日志的写入负载。 –

回答

0

这取决于很多因素:

  • 数据和日志文件的位置/配置
  • 碎片
  • 自动增长设置
  • IO性能 等

很可能tempdb的是因为它在服务器重新启动期间重新创建,或者(如上所述)tempdb是重新创建的在更高效的一组磁盘上

+0

我们可以最小化这种性能差异吗? – Venus