Jason Liu Asked: 2024-07-20 14:13:59 +0800 CST2024-07-20 14:13:59 +0800 CST 2024-07-20 14:13:59 +0800 CST 哪些类型的操作可能导致“临时表已更改”重新编译? 772 一个 SP 中频繁发生重新编译,原因为“临时表已更改”。对临时表进行哪些类型的操作会触发此操作?临时表上没有更改和创建索引操作,只有像下面这样的“统计信息已更改”这样的 DML。谢谢。 sql-server 1 个回答 Voted Best Answer Paul White 2024-07-21T01:24:56+08:002024-07-21T01:24:56+08:00 对临时表进行哪些操作会触发这种情况? 根据SQL Server 2012 中的计划缓存和重新编译,解释如下: 子类名称 子类值 重新编译的详细原因 临时表已更改 5 临时表架构、绑定或权限已更改。 如果您没有更改架构、绑定或权限,则另一种解释是 SQL Server 不相信架构没有更改,因为临时表是在不同的范围内创建的。请注意,这包括动态 SQL 中的 DML,其中临时表是在运行动态 SQL 之前创建的。 请参阅Joe Sack 撰写的《使用跨多个范围的临时表减少工作负载的重新编译》 。 当使用 DML 语句(SELECT、INSERT、UPDATE、DELETE)引用临时表时,如果临时表是由外部作用域批处理创建的,我们将在每次执行 DML 语句时重新编译该 DML 语句。 您需要使用 SQL Server 2019 或更高版本才能从中受益。
根据SQL Server 2012 中的计划缓存和重新编译,解释如下:
如果您没有更改架构、绑定或权限,则另一种解释是 SQL Server 不相信架构没有更改,因为临时表是在不同的范围内创建的。请注意,这包括动态 SQL 中的 DML,其中临时表是在运行动态 SQL 之前创建的。
请参阅Joe Sack 撰写的《使用跨多个范围的临时表减少工作负载的重新编译》 。
您需要使用 SQL Server 2019 或更高版本才能从中受益。