日期:2014-05-18  浏览次数:20404 次

嵌套存储过程太影响速度,有什么办法
procedure [dbo].[sp_Other](@F_Month varchar(50),@date1 datetime,@date2 datetime,@F_Check varchar(10),@F_Control varchar(10),@F_Tag int,@user varchar(50),@fx int)
  set nocount on


if @fx=1 and @f_tag=2
exec sp_StorageSum2 @F_Month,'原材料'
if @fx=1 and @f_tag=1 
exec -----


为了便于管理,我用嵌套存储过程


当我查询时
exec SP_other '201206','2012-6-1','2012-6-30','','1','2','管理员',1
实际就是执行
exec sp_StorageSum2 @F_Month,'原材料'


但是exec SP_other '201206','2012-6-1','2012-6-30','','1','2','管理员',1
查询我花了10秒
直接用exec sp_StorageSum2 @F_Month,'原材料'
查询我花了2秒,为什么呀,哪里有问题呀


------解决方案--------------------
你可以看看执行计划,这种情况一般是在编译的时候,SQL优化器帮你优化了语句,并且缓存了执行计划。有时候我们使用一个假设10个表关联得出来的视图。但是有些使用其实只需要其中2个,优化器就会在分析的时候只挑出那两个表,其他表不关联。
你执行外层存储过程较快我的猜测是把你的语句在运算的时候合成更高效的方式了。