【问题标题】:SQL Server stored procedures automatically recompiled?SQL Server 存储过程自动重新编译?
【发布时间】:2012-11-28 17:43:45
【问题描述】:

如果我使用 Web 应用程序 Web Data Administrator 并编辑存储过程 SQL 查询,它会自行重新编译吗? (SQL Server 和数据库开发方面的新手)

【问题讨论】:

    标签: sql sql-server-2005 stored-procedures


    【解决方案1】:

    MSSQL Server 确实维护了query plans 的缓存,但这与编译后的代码不同。

    SQL Server 管理这个缓存,如果它缓存了一个非最优计划,它可能会成为一些痛苦的根源。虽然这在 15 年内发生在我身上的次数不到 5 次(这似乎是特定服务器的问题),最好让 SQL Server 处理它而不是碰它

    您可以通过提供WITH RECOMPILE 选项来强制SQLServer 重新编译。同样的警告也适用,除非你有充分的理由,否则不要

    【讨论】:

    • 是的;但我只是发现有时人们在看到WITH RECOMPILE 时会断开连接,认为在 Sproc 的定义中需要让它从缓存中清除该 sproc。我没有说出我所说的正确,但它确实似乎表明你没有说你所说的。正在删除!
    【解决方案2】:

    SQL 是一种脚本语言,这意味着您编写的代码不会被编译。而是存储在服务器上供以后使用。

    编辑存储过程时,可以执行 ALTER 脚本,或 DROP then CREATE 脚本。这会将您的 Web 数据管理(或 SSMS)窗口中的文本发送到服务器,发出一个命令,告诉服务器将此新查询存储为一个过程以供以后使用。

    所以,简而言之,是的,如果您执行 ALTER 脚本。

    【讨论】:

    • 实际上,SQL Server 存储过程在第一次运行时就被“编译”了。 SQL SERVER – Stored Procedure are Compiled on First Run 这是使用 Sprocs 的(边际)好处之一。不过,重用的文本查询不再获得许多相同的好处。但是,您正确地注意到使用ALTER(或DROP 然后CREATE)确实会导致重新编译。否则新的sproc不会生效。
    • @AndrewBarber 好点。我什至没有考虑所有的 SP 重新编译和调整爵士乐。想知道最初的问题是否与编译有关...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多