几天前,我被问到这个问题(电话),我被抽空了。我说过执行计划存储在服务器中,所以它被称为存储过程。但我不确定我是对的。
在此之后,我的研究表明,SQL Server中有专门用于存储执行计划的计划缓存或过程缓存。在那篇文章中,也有对所谓的编译计划存根的引用。因此,似乎先创建了编译后的计划Stub,然后创建了执行计划。
所以我想知道的是
如果您可以向我推荐一个现有的这样的问题或其他一些文章,这也应该是好的。
发布于 2016-02-08 09:59:07
为什么存储过程称为存储过程?
因为它是一个过程,存储在数据库中的。
在其他语言/环境中,可以执行的过程通常不被存储。它们是用字节码或汇编程序编译的。也就是说,程序不再以原文形式存在。原始过程不能像在这些环境中创建时那样被检索(尽管反向工程可以检索该过程的本质)。
在Server中创建存储过程时,它完全存储在原始的全文形式、相同的缩进、相同的大小写、相同的行(包括注释等)中。可以检索完整创建存储过程的文本。
关于执行存储过程的简化说明
当Server想要执行存储过程时,它将首先检查缓存是否已经编译。如果它在缓存中找到一个条目(以执行计划的形式),它将使用这个条目来执行。如果它找不到一个条目,它将将该过程编译成一个执行计划,将其存储在缓存中供以后使用,然后使用执行计划执行它。
有些情况迫使重新编译存储过程,例如当清除执行计划缓存时(模式更改、统计数据更新、.)或向强制重新编译的编译器提供命令时(存储过程WITH RECOMPILE、查询选项OPTION(RECOMPILE)、.)。
发布于 2016-02-08 09:08:25
我说过执行计划存储在服务器中,所以它被称为存储过程。
不对。执行计划也存储在服务器上,用于动态SQL。我不知道为什么它被称为存储过程,但整个过程存储在服务器上(代码等)。我可以假设这就是原因--但是执行计划(缓存)在这里是不相关的,因为所有的执行计划都可能存储在那里。
1:你在乎什么?显然,会执行SQL语句。有一些解析,以确保它是有效的。其余的都是实现细节--甚至在不同版本之间也可能有所不同。我假设SP存储在某种程度的字节码中--但又一次,谁在乎呢?我做了25年的数据库级开发,我从来没有考虑过这一点。
https://stackoverflow.com/questions/35265691
复制相似问题