以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  sql 效率优化。。。。  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=85578)

--  作者:fubblyc
--  发布时间:2016/5/29 0:06:00
--  sql 效率优化。。。。

各位大神,我写了一个sql视图,语句如下,感觉速度好慢,发给大家帮忙看下哪些可以优化的。。。。

SELEC T top 100
a.[业务日期],

Cast(round(Sum(a.[销售额])/ dbo.[每日录入].[日销售目标],4) *100 as varchar(20))+\'%\' AS [日达成率],


Cast(round((selec t sum([销售额]) from dbo.worksheet as b where b.业务日期<=a.业务日期 and datename(year,b.[业务日期]) = datename(year,a.[业务日期]) and datename(month,b.[业务日期]) = datename(month,a.[业务日期])) / dbo.[月目标].[月目标],4)*100 as varchar(20))+\'%\' AS [月累计达成率],



Sum(a.[销售额]) - (selec t sum([销售额]) from dbo.worksheet as c where a.业务日期>=\'2016-01-01\' and  c.业务日期 = DATEADD(year,-1,a.业务日期)) as [与同期差额],


round(sum(a.[销售额])/count(DISTINCT 单号),2) AS [客单价],

FROM
dbo.worksheet AS a
left JOIN dbo.[vip日销售] ON a.[业务日期] = dbo.[vip日销售].[业务日期]
inner JOIN dbo.[每日录入] ON a.[业务日期] = dbo.[每日录入].[业务日期]
inner JOIN dbo.[月目标] on datename(year,a.[业务日期])= dbo.[月目标].[年份] and datename(month,a.[业务日期])= dbo.[月目标].[月份]
GROUP BY
a.[业务日期],
dbo.[vip日销售].[VIP销售额],
dbo.[每日录入].[日销售目标]

ORDER BY
a.[业务日期] ASC

[此贴子已经被作者于2016/5/29 0:06:31编辑过]

--  作者:fubblyc
--  发布时间:2016/5/29 0:08:00
--  

如果不把这些放在数据库里写视图,而是直接把这些放在项目里,用foxtable内置的统计工具,速度是不是会更快?

[此贴子已经被作者于2016/5/29 0:08:16编辑过]

--  作者:jspta
--  发布时间:2016/5/29 10:24:00
--  
效率差不多,但视图应该更快点
--  作者:fubblyc
--  发布时间:2016/5/29 10:49:00
--  
哦,好的,谢谢 jspta 老师!!
--  作者:大红袍
--  发布时间:2016/5/29 23:07:00
--  
  去掉子查询吧,看看会不会快一点。如果变快很多,那么,就返回foxtable后,再用代码填上累加值。
--  作者:fubblyc
--  发布时间:2016/5/30 0:28:00
--  
好,我试试!!