gpt4 book ai didi

sql - "With recompile"是否重新编译存储过程中的所有查询?

转载 作者:行者123 更新时间:2023-12-04 23:47:17 24 4
gpt4 key购买 nike

所以我们有一个相当大的数据库和一个搜索大量文档的存储过程。根据上下文,它要么获取数百万个文档,要么只获取一百个。

重点是,对于百万和一百个文件,该过程需要 30 秒,这是超现实的。如果我添加 OPTION (RECOMPILE)每个在五个查询中,100 个文档需要 1 秒,数百万个文档需要 30 秒(预计)。

我试过用 WITH RECOMPILE 创建一个程序选项,但它似乎没有重新编译其中的查询。

这样对吗?是否WITH RECOMPILE存储过程重新编译内部查询还是整个 SP 的执行计划?如何在不重复的情况下执行此操作 OPTION (RECOMPILE)每次查询后?

最佳答案

Does the WITH RECOMPILE on stored procedure recompiles inner queries or just the execution plan for an entire SP?



内部查询或只是执行计划,我不确定这是什么意思?使用 Stored proc 级别的 Recompile,每次执行 proc 时都会导致重新编译并且查询不会保存到 Cache

How can I do this without repeating OPTION (RECOMPILE) after each query?


create proc usp_test
with Recompile
as
Begin
--code
End

更多详情: With Recompile每次运行时,都会为整个存储过程重新编译一个新计划。

假设,你有以下 proc
create proc usp_test
as
Begin
select * from t1
go
select * from t2
End

在存储过程之上添加重新编译,将导致 SQLServer 重新编译存储过程中的所有批次

而不是重新编译,总过程,如果你确定知道哪个批次导致问题,你可以像下面一样添加 Option(Recompile)
 create proc usp_test
as

Begin

select * from t1 option(recompile)

select * from t2

End

这样做,您可以避免对其他批次进行不必要的重新编译

关于sql - "With recompile"是否重新编译存储过程中的所有查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41123944/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com