注册 登录
编程论坛 SQL Server论坛

求助,关于统计的SQL语句的优化?

球球 发布于 2008-09-04 17:02, 1031 次点击
在线求助SQL优化:
Select series,xValue,sum(yValue) AS yValue From (
    SELECT 1 as series,0 As Version,Convert(varchar(2),datepart(m,AnalyseDate))+'.'+Convert(varchar(2),datepart(dd,AnalyseDate)) As xValue,Total As yValue
    FROM dbo.IPTV_USER_LoginAnalyse WHERE AnalyseType = 3 AND [Type] = 2 AND Analysedate between '2008-08-22 00:00:00' and '2008-09-09 23:59:59'
Union All
    SELECT 2 as series,0 As Version,xValue,Count(1) AS yValue FROM(
    SELECT distinct userid,Convert(varchar(2),datepart(m,RowTime))+'.'+Convert(varchar(2),datepart(dd,RowTime)) As xValue FROM IPTV_FISH_HISTORY
    Where RowTime between '2008-08-22 00:00:00' and '2008-09-09 23:59:59') a
    Group by xValue  
Union All
    SELECT 3 as series,0 As Version,xValue,Count(1) AS yValue FROM(
    SELECT ID,Convert(varchar(2),datepart(m,RowTime))+'.'+Convert(varchar(2),datepart(dd,RowTime)) As xValue FROM IPTV_FISH_HISTORY
    WHERE Status = 1 AND RowTime between '2008-08-22 00:00:00' and '2008-09-09 23:59:59') a
    Group by xValue
) AS x group by series,xValue
4 回复
#2
hslglzs20082008-09-04 18:41
各位大虾,请问一下, 我是刚学数据库的,想下个SQL 2005,但是很难下到,不知道这个软件占多大内存,谢谢啦
#3
球球2008-09-05 02:15
迅雷上面有下载。
分别在UserID_RowTime_Status,Analysedate_AnalyseType_Type,Analysedate,AnalyseType,Type上建了索引,查询百万条数据,速度从1万6提高到8千,还有能优化的地方请不吝指教一下,谢谢了。
#4
西风独自凉2008-09-05 16:44
基本上也就這樣 了
#5
bb38522008-09-06 13:26
Select series,xValue,sum(yValue) AS yValue From (
    SELECT 1 as series,0 As Version,Convert(varchar(2),datepart(m,AnalyseDate))+'.'+Convert(varchar(2),datepart(dd,AnalyseDate)) As xValue,Total As yValue
    FROM dbo.IPTV_USER_LoginAnalyse WHERE AnalyseType = 3 AND [Type] = 2 AND Analysedate >='2008-08-22 00:00:00' and Analysedate <='2008-09-09 23:59:59'
Union All
    SELECT case when Status=1 then 3 else 2 end as series,0 As Version,xValue,Count(1) AS yValue FROM(
    SELECT distinct userid,Convert(varchar(2),datepart(m,RowTime))+'.'+Convert(varchar(2),datepart(dd,RowTime)) As xValue     (select count(1) from )
FROM IPTV_FISH_HISTORY
    Where RowTime >='2008-08-22 00:00:00' and RowTime<='2008-09-09 23:59:59') a
    Group by xValue ,series
 
) AS x group by series,xValue
不知道这样会不会快一点
另外:我觉得换种思路写法,不用group by 应该会比较快一点吧
1