【问题标题】:SQL temp table vs physical (actual) table performanceSQL 临时表与物理(实际)表性能
【发布时间】:2017-11-14 14:40:11
【问题描述】:

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

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

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

为什么临时表比物理表更高效、更好?有人对此有一些背景吗?

【问题讨论】:

  • 可能临时表空间位于更高效的磁盘集上。
  • 你比较过执行计划吗?您的表是否真的 100% 相同,包括确切的数据类型和长度(在 char/varchar 的情况下)?
  • 检查为您的数据库设置的恢复模式。最有可能的是full。 Tempdb 始终处于simple 模式,这意味着对批量操作的记录最少。与full 模式相比,这意味着事务日志的写入负载更少。
  • 顺便说一句,insert into... 不会被最低限度地记录,除非 OP 指定“with (TABLOCK)”。我们还需要记住,如果为 DB 启用了 CDC,所有操作都会被完整记录,即使恢复模型很简单。
  • 是的,表的所有数据类型和长度都相同。

标签: sql sql-server performance database-performance temp-tables


【解决方案1】:

这取决于很多因素:

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

可能 tempdb 碎片较少,因为它是在服务器重新启动期间重新创建的,或者(如上所述)tempdb 位于更高效的磁盘集上

【讨论】:

    猜你喜欢
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多