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

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_Title
order by [PV] DESC, [IP] DESC

 

通过查看执行计划,大部分的时间都花在group by字段和order by字段进行排序,原表在Url_Id,Url,Url_Title字段中已经创建了非聚集索引,但加上order by字段后,就失效了,去掉order by就非常快

汪汪一只猫
浏览 488回答 5
5回答

精慕HU

你这个是网站统计系统的报告吧。因为你这个 pv , 和 ip 是计算的中间值。所以,很难再进行优化了。 一般的解决方案是创建一个汇总表。保存你上面SQL汇总的信息。 如果当天已经过去了,汇总过一次了以后,以后就不会再汇总了,用一个表缓存是很划算的。 如果你是要实现当天即时的,那么我建议你建立一个表,专门保存当天的汇总。然后5分钟,汇总一次。 汇总之前清空表。

慕码人8056858

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

杨__羊羊

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

慕运维8079593

建议给dt字段加上聚合索引,如果是日期类型的话。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

SQL Server