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分钟,汇总一次。
汇总之前清空表。
- 5 回答
- 0 关注
- 487 浏览
添加回答
举报
0/150
提交
取消