“存储过程是预编译的”是什么意思?

时间:2010-11-24 10:00:16

标签: mysql sql-server database stored-procedures

我经常听到有人说存储过程是预先编译的。这是什么意思?

实际上我们将查询写入存储过程然后进行编译。如果有任何语法错误,它会抱怨。因此,如果是这种情况,则编译将在那个时间点发生。

然后,“Pre”指的是什么?

4 个答案:

答案 0 :(得分:4)

它们实际上是预解析的,并且在CREATE和ALTER

上检查了语法/语义

查询计划的“编译”按需发生

有关编译和重复使用的概述,请参阅"Batch Compilation, Recompilation, and Plan Caching Issues in SQL Server 2005 "

术语(用你的意思)可以追溯到SQL Server 6.5。上一白皮书链接中突出显示的“新”方式始于SQL Server 7.0

答案 1 :(得分:1)

在Microsoft SQL Server中,存储过程在第一次运行时会编译为查询计划。

在后续运行中,它们有时会从源代码重新编译,但并非总是如此。这就是为什么他们被称为“预编译”。

除非您指定应始终重新编译它们,或者运行sp_recompile以在下次运行时强制重新编译。

答案 2 :(得分:1)

如果运行它,将不会解析存储过程的sql内容。 sql解析可能非常耗时。

答案 3 :(得分:0)

预编译的:在Microsoft SQL Server中,存储过程在首次运行时被编译为查询计划。在随后的运行中,有时会从源头重新编译它们,但并非总是如此。因此,它们被称为“预编译”