sql-server - 使用 TRUNCATE TABLE 如何影响索引

标签 sql-server

使用 SQL Server 2005,升级到 2012

如果我有 ETL,则会执行以下操作(简化)

TRUNCATE TABLE detination
INSERT INTO detination
SELECT *
FROM source

这是否会清除索引并使用插入重建索引?我会有碎片吗?

最佳答案

假设它不会截断索引。这意味着数据库在物理上不一致。所以不可能是这样。

截断在逻辑上删除所有行并在物理上为所有分区创建新的 B 树。由于树木是新鲜的,不存在碎片。

实际上我不确定树是否分配了 0 个或 1 个页面。但没关系。我相信对于临时表来说,有一种特殊情况与临时表缓存有关。也无所谓。

您问题中的插入内容与任何其他插入内容的工作方式相同。跨语句通信方式不受前一次截断的影响。它是否会导致碎片取决于您的具体情况,恕我直言,最好放在一个新问题中。

关于sql-server - 使用 TRUNCATE TABLE 如何影响索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14076338/

相关文章:

sql-server - 如何从 Azure SQL 数据库复制到本地 ubuntu 计算机?

sql-server - 如何恢复 GitHub Codespaces 容器中的 SQL Server 备份?

.net - Sql Server 中的 CLR 集成可能出现哪些问题

sql-server - 将 SQL Server 数据库对象公开为文件系统中的文件

sql-server - Powershell将对象插入SQL Server数据库更优雅的解决方案

sql - 如何从表中查找具有单引号字符串的字符串?

sql-server - 是否可以使用 Azure DevOps 构建任务将 SQL 脚本部署到多个数据库?

java - 从另一个存储过程中的存储过程获取 ResultSet

sql - 迁移带有时间戳列的数据库表

c# - EF在sql表中创建新条目时需要主键