sql语句执行效率低、速度很慢
语句如下:withrownumas(selectr=ROW_NUMBER()over(orderbya.fromuser,a.timestamp),*from(selec...
语句如下:
with rownum as
(
select r=ROW_NUMBER() over (order by a.fromuser,a.timestamp),*
from (select * from GL_G18_MsgSignalRecord where instype in (0,1) and fromtype=4 ) a
)
,totable as
(
select tot.region as colname, tot.robot as rowname,SUM(tot.onlinetime) as pvalue
from
(select Convert(varchar(4), datepart(YEAR,b.timestamp))+'-'+ REPLICATE('0',2-LEN(Convert(varchar(2), datepart(month,b.timestamp))))+ Convert(varchar(2), datepart(month,b.timestamp)) as month,
e.RegionName as region,
d.RobotCode as robot,
(case when c.instype=0 and b.instype=1 then DATEDIFF(S,c.timestamp,b.timestamp) else 0 end) as onlinetime
from rownum c,rownum b,DG_Robot d,DG_Region e where c.r=b.r-1 and b.fromuser=c.fromuser and b.fromuser=d.RobotCode and d.RegionCode=e.RegionCode
) tot group by region,robot
)
select top 5 colname from totable group by colname order by sum(pvalue) desc
其中主表 GL_G18_MsgSignalRecord中有12000左右的数据,执行速度为24s
主要实现功能:
取instype=0及下一条instype=1之间的时间间隔、按照月份(month)、区域(region)、机器人(robot)进行列选项搜索 ;
其中主表关联了区域、机器人两张表
求大神指点 如何优化此语句 谢谢 展开
with rownum as
(
select r=ROW_NUMBER() over (order by a.fromuser,a.timestamp),*
from (select * from GL_G18_MsgSignalRecord where instype in (0,1) and fromtype=4 ) a
)
,totable as
(
select tot.region as colname, tot.robot as rowname,SUM(tot.onlinetime) as pvalue
from
(select Convert(varchar(4), datepart(YEAR,b.timestamp))+'-'+ REPLICATE('0',2-LEN(Convert(varchar(2), datepart(month,b.timestamp))))+ Convert(varchar(2), datepart(month,b.timestamp)) as month,
e.RegionName as region,
d.RobotCode as robot,
(case when c.instype=0 and b.instype=1 then DATEDIFF(S,c.timestamp,b.timestamp) else 0 end) as onlinetime
from rownum c,rownum b,DG_Robot d,DG_Region e where c.r=b.r-1 and b.fromuser=c.fromuser and b.fromuser=d.RobotCode and d.RegionCode=e.RegionCode
) tot group by region,robot
)
select top 5 colname from totable group by colname order by sum(pvalue) desc
其中主表 GL_G18_MsgSignalRecord中有12000左右的数据,执行速度为24s
主要实现功能:
取instype=0及下一条instype=1之间的时间间隔、按照月份(month)、区域(region)、机器人(robot)进行列选项搜索 ;
其中主表关联了区域、机器人两张表
求大神指点 如何优化此语句 谢谢 展开
2个回答
展开全部
算不上优化,按照自己的理解说
1能不用*就不要用*,把你要查询的字段写出来
2 e.RegionName不能在rownum中给检索出来么?感觉在上面检索会块一点点
3 为什么不直接查询你最后要的结果还要中间再查询个totable
4 totable的字查询里month是个无用字段
最后请大神点评以下
1能不用*就不要用*,把你要查询的字段写出来
2 e.RegionName不能在rownum中给检索出来么?感觉在上面检索会块一点点
3 为什么不直接查询你最后要的结果还要中间再查询个totable
4 totable的字查询里month是个无用字段
最后请大神点评以下
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询