关于优化的小问题,我是个新手能帮我看看我写的存储过程吗?
我在编写存储过程时有个小问题,当我调用存储过程时将原来的ID码转换成了char字符型,而我本来的设计是直接读取int 整形,而为了方便调用复杂的查询语句不得不见其转换成字符型+CAST ( @DLID AS VARCHAR(10) )+ ',这将影响数据的查询速度,请问有什么好办法吗?
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE proc sp_DL_Date_Day
(
@b datetime,
@e datetime,
@DLID int
)
as
begin
declare @sql varchar(8000)
set @sql = 'select ZLID 中类ID,CatCName '
select @sql=@sql+ ',sum(CASE CatDate when ' ' '
+ convert(varchar(10), TrueDate,120)+
' ' 'then Cost else 0 end)[ '
+ convert(varchar(10),TrueDate,120) + '] '
from (select TrueDate from SDate where TrueDate > = @b and TrueDate <= @e) as a
set @sql = @sql + ', sum(Cost) 总计花费
from ((select * from AD_CBD where CatDate > = ' ' '
+CAST ( @b AS VARCHAR(10) )+ ' ' 'and CatDate <= ' ' '
+CAST ( @e AS VARCHAR(10) )+ ' ' ' ) as b
inner join AD_Cat as p
on b.CatID = p.CatID)
where DLID = ' +CAST ( @DLID AS VARCHAR(10) )+ '
Group by p.ZLID,CatCName
order by sum(Cost) Desc '
exec(@sql)
end
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
------解决方案--------------------寫的不是很複雜,感覺語句上沒有多少可以優化的地方。
------解决方案--------------------比较值为CAST ( @DLID AS VARCHAR(10) )这不会影响效率,而且你的是动态语句,编译后应该没有什么影响
这里的内嵌的查询不要用 *,指定需要的列,比如就需要CatID
in比这个要差
如果效率确实不高,可以建临时表(带索引)或索引视图来提高效率