执行计划--重编译
--========================================== --在生产环境中,会遇到表中某列数据分布不均匀,导致在生成执行计划 --不能适应参数的变化 --========================================== --解决方式:强制存储过程重编译 CREATE PROCEDURE dbo.USP_GetData ( @PID INT ) WITH RECOMPILE AS BEGIN SELECT * FROM TB1 WHERE PID=@PID END GO --========================================== --解决方式:强制存储过程中语句重编译 CREATE PROCEDURE dbo.USP_GetData ( @PID INT ) AS BEGIN SELECT * FROM TB1 WHERE PID=@PID OPTION(RECOMPILE) END GO --========================================== --解决方式:执行存储过程时重编译 EXEC dbo.USP_GetData @PID=10 WITH RECOMPILE --========================================== --解决办法:在存储过程中对参数进行区分 CREATE PROCEDURE dbo.USP_GetData ( @PID INT ) AS BEGIN IF(@PID>5000) BEGIN SELECT * FROM TB1 WHERE PID=@PID END ELSE BEGIN SELECT * FROM TB1 WHERE PID=@PID AND 1=1 END OPTION(RECOMPILE) END GO --========================================== --解决办法:指定编译时使用的变量值 --扩展:由于存储过程的执行计划是在服务器重启后第一次执行时生成 --因此执行计划与第一次传入参数紧密相关 CREATE PROCEDURE dbo.USP_GetData ( @PID INT ) AS BEGIN SELECT * FROM TB1 WHERE PID=@PID OPTION(optimize for(@PID=75124)) END GO --========================================== --解决办法:对执行SQL指定编译计划 --如果SQL由程序端传入,而程序端代码不可更改时,可以考虑此方式 EXEC [sys].[sp_create_plan_guide] @name=N'Guide1', @stmt=N'SELECT COUNT(b.[SalesOrderID]),SUM(p.[Weight]) FROM [dbo].[SalesOrderHeader_test] a INNER JOIN [dbo].[SalesOrderDetail_test] b ON a.[SalesOrderID]=b.[SalesOrderID] INNER JOIN [Production].[Product] p ON b.[ProductID]=p.[ProductID] WHERE a.[SalesOrderID]=@i', @type=N'OBJECT', @module_or_batch=N'Sniff', @params=NULL, @hints=N'option(optimize for(@i=75124))'; --参考资料:http://www.cnblogs.com/lyhabc/articles/3222179.html
当执行计划引用的对象架构发生变化(如索引删除和添加)以及相关统计更新后,执行计划会再下一次执行时重新生成执行计划。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现