为了账号安全,请及时绑定邮箱和手机立即绑定

请问这个sql还有什么方法可以优化?

请问这个sql还有什么方法可以优化?

汪汪一只猫 2018-12-07 05:44:01
SELECT url_id     ,Url ,Url_Title ,MIN([First_Visite_Time]) AS 'First_Visite_Time' ,MAX([Last_Visite_Time]) AS 'Last_Visite_Time' ,SUM([User_Count]) + SUM (ISNULL([e_user_count],0)) AS 'UC' ,SUM([IP_Count]) + SUM (ISNULL([e_ip_count],0)) AS 'IP' ,SUM([PV_count]) + SUM (ISNULL([e_pv_count],0)) AS 'PV' ,SUM([Access_Count]) + ISNULL (sum([e_visite_count]),0) AS 'Access_Count'FROM [report_LinkInfo]where dt>='2010-7-1' and dt<='2010-8-2'GROUP BY Url_Id,Url,Url_Titleorder by [PV] DESC, [IP] DESC   通过查看执行计划,大部分的时间都花在group by字段和order by字段进行排序,原表在Url_Id,Url,Url_Title字段中已经创建了非聚集索引,但加上order by字段后,就失效了,去掉order by就非常快
查看完整描述

5 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

你这个是网站统计系统的报告吧。因为你这个 pv , 和 ip 是计算的中间值。所以,很难再进行优化了。

一般的解决方案是创建一个汇总表。保存你上面SQL汇总的信息。

如果当天已经过去了,汇总过一次了以后,以后就不会再汇总了,用一个表缓存是很划算的。

如果你是要实现当天即时的,那么我建议你建立一个表,专门保存当天的汇总。然后5分钟,汇总一次。

汇总之前清空表。

查看完整回答
反对 回复 2019-01-07
?
慕码人8056858

TA贡献1803条经验 获得超6个赞

order by 之前的建立视图,对视图Order by 应该可以。

查看完整回答
反对 回复 2019-01-07
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

试试先读到表变量中再order by 排序

查看完整回答
反对 回复 2019-01-07
?
慕运维8079593

TA贡献1876条经验 获得超5个赞

建议给dt字段加上聚合索引,如果是日期类型的话。

查看完整回答
反对 回复 2019-01-07
  • 5 回答
  • 0 关注
  • 487 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信