sql server执行存储过程慢的问题
2011-08-04 17:23
267 查看
要实现一个根据时间查询数据生成报表的功能,写了如下存储过程:
CREATE Procedure [dbo].[Report_SearchEnginOnAccount]
@FromDate DATETIME,
@ToDate DATETIME
AS
SELECT '' as ADGroup
,'' as Content
,'' as KeyWord
,sum([ViewAdPV]) as ViewAdPV
,sum([Listing]) as Listing
,sum([NB]) as NB
,sum([NU]) as NU
,sum([BouncedRate]) as BouncedRate
,sum([BouncedUV]) as BouncedUV
,sum([UV]) as UV
,sum([PV]) as PV
,[Date]
,sum([ClickCount]) as ClickCount
,sum([ShowCount]) as ShowCount
,sum([ClickRate]) as ClickRate
,sum([TotalPrice]) as TotalPrice
FROM [SmallChannelDB].[dbo].[SearchEnginDataReport_View]
WHERE [Date]<= @ToDate AND [DATE]>=@FromDate
Group by [date]
GO 在使用过程中出现了超时的错误,经查发现是因为存储过程执行时间太长,20万左右的数据一分多钟都没有执行完……我以为是sql语句里面出现的问题,然后直接把@ToDate和@FromDate赋值执行,不到1s就出结果了,后来经公司sql server高手指导,把View换成直接的表连接,然后给两个表的Date列分别加上索引,问题解决,但不知道具体原因是什么。结果第二天又恢复原状了……
后来在网上搜索资料,发现在sql server中有一个叫“Parameter sniffing”的特性(
http://blog.csdn.net/emili/article/details/2192081),有几个解决办法,一个就是declare一个变量,然后给这个变量赋上参数的值,在存储过程中使用此变量的值就可以了。
CREATE Procedure [dbo].[Report_SearchEnginOnAccount]
@FromDate DATETIME,
@ToDate DATETIME
AS
SELECT '' as ADGroup
,'' as Content
,'' as KeyWord
,sum([ViewAdPV]) as ViewAdPV
,sum([Listing]) as Listing
,sum([NB]) as NB
,sum([NU]) as NU
,sum([BouncedRate]) as BouncedRate
,sum([BouncedUV]) as BouncedUV
,sum([UV]) as UV
,sum([PV]) as PV
,[Date]
,sum([ClickCount]) as ClickCount
,sum([ShowCount]) as ShowCount
,sum([ClickRate]) as ClickRate
,sum([TotalPrice]) as TotalPrice
FROM [SmallChannelDB].[dbo].[SearchEnginDataReport_View]
WHERE [Date]<= @ToDate AND [DATE]>=@FromDate
Group by [date]
GO 在使用过程中出现了超时的错误,经查发现是因为存储过程执行时间太长,20万左右的数据一分多钟都没有执行完……我以为是sql语句里面出现的问题,然后直接把@ToDate和@FromDate赋值执行,不到1s就出结果了,后来经公司sql server高手指导,把View换成直接的表连接,然后给两个表的Date列分别加上索引,问题解决,但不知道具体原因是什么。结果第二天又恢复原状了……
后来在网上搜索资料,发现在sql server中有一个叫“Parameter sniffing”的特性(
http://blog.csdn.net/emili/article/details/2192081),有几个解决办法,一个就是declare一个变量,然后给这个变量赋上参数的值,在存储过程中使用此变量的值就可以了。
相关文章推荐
- SQL Server 存储过程遇到“表 ''#TT'' 没有标识属性无法执行 SET 操作”错误
- 启动SQL Server时自动执行存储过程
- sql server中高并发情况下 同时执行select和update语句死锁问题 (二)
- [SQL Server] 多触发器执行问题
- SQL Server使用代理服务执行job时报错问题解决了
- SQL Server联机丛书:执行存储过程
- 解决存储过程中SQL字符串语句执行引入参数的问题
- sql server中高并发情况下同时执行select和update语句死锁问题(一)
- Linux下用freetds执行SQL Server的sql语句和存储过程
- sql server 自动执行存储过程
- TFDStoredProc执行sql server的部分存储过程报错,有的是好的。
- 如何在不提升用户权限的情况下,使普通用户执行xp_cmdshell存储过程2008-11-26 14:09:29SQL Server 2005 及之后的版本
- Sql Server每日一练-如何在 SQL Server 启动时自动执行一个存储过程
- 客户端直接执行存储过程正常但代码调用慢的问题
- EJB 调用Sqlserver 存储过程报错,在sql server中执行却正常 top 2 解决方法
- sql server中同时执行select和update语句死锁问题
- 启动SQL SERVER时自动执行存储过程
- Sql server 数据库中,纯SQL语句查询、执行 单引号问题。
- SQL SERVER中存储过程参数问题
- sql server中高并发情况下同时执行select和update语句死锁问题(二)