博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL优化:重新编译存储过程和表
阅读量:4547 次
发布时间:2019-06-08

本文共 966 字,大约阅读时间需要 3 分钟。

最近发现原来执行很快的存储过程,突然慢了下来,而很多存储过程每天就运行一次,所以打算把存储过程重新编译,另外,考虑到数据在不断变化,所以也要更新表的统计信息,这样能生成比较好的执行计划。

下面是具体的方法:

1、把存储过程标记为需重新编译,存储过程将在下次运行时重新编译

 

DECLARE @sql VARCHAR(max)SET @sql = '';select @sql = @sql + 'exec sp_recompile ' + name+';' + CHAR(10)from sys.objectswhere type_desc in ('SQL_STORED_PROCEDURE')      and is_ms_shipped = 0--select @sqlEXEC(@sql)

2、强制当前存储过程执行重编译计划  

exec procedurename with recompile  

3、清除所有的在执行计划

dbcc freeproccache

go
只在当前数据库中寻找对象,存储过程和触发器所用的查询只在编译时进行优化。
A. 当前数据库中存储过程、触发器、表或视图的限定或未限定名称。object 的数据类型为 nvarchar(776),没有默认值 
B. 对数据库进行了索引或其他会影响数据库统计的更改后,已编译的存储过程和触发器可能会失去效率。
   通过对作用于表上的存储过程和触发器进行重新编译,可以重新优化查询
C. 如果 object 是存储过程或触发器的名称,则该存储过程或触发器将在下次运行时重新编译。
   如果 object 是表或视图的名称,则所有引用该表或视图的存储过程或触发器都将在下次运行时重新编译。
sp_recompile procedurename|tablename|functionname |triggername |view  
4、更新统计信息

 

declare @v varchar(max)select @v = ''select @v = @v +'update statistics ' +name+';'from sys.tablesselect @v exec(@v)

 

转载于:https://www.cnblogs.com/momogua/p/8304445.html

你可能感兴趣的文章
力扣——第N个泰波那契数
查看>>
服务器 以及HTTP请求的关系
查看>>
JMETER使用
查看>>
如何优化Mysql千万级快速分页,limit优化快速分页,MySQL处理千万级数据查询的优化方案!(zz)...
查看>>
整体性学习的一般顺序 如何进行整体性学习
查看>>
罗永浩简历(自荐新东方的简历)
查看>>
js特效,轻松实现内容的无缝平滑滚动
查看>>
[leetcode]Valid Palindrome
查看>>
LeetCode第四题,Add Two Numbers
查看>>
mysql删除重复数据
查看>>
文件下载工具类
查看>>
Python 定义自己的常量类
查看>>
C++读取文本文件
查看>>
Python 字典排序
查看>>
sql中写标量函数生成大写拼音首字母
查看>>
ASP.NET Core 2.1 : 十五.图解路由(2.1 or earler)
查看>>
服务器返回状态码说明
查看>>
GitHub for Windows提交失败“failed to sync this branch”
查看>>
linux 安装 git
查看>>
Margin
查看>>