select distinct domain,sum(total) from
(
select distinct domain,sum(if(record_status=0,1,0)) total from t_prehandle_zhigao_01  where record_status = 0 group by domain 
union all
select distinct domain,sum(if(record_status=0,1,0)) total from t_prehandle_zhigao_02 where record_status = 0  group by domain 
union all
select distinct domain,sum(if(record_status=0,1,0)) total from t_prehandle_zhigao_03  where record_status = 0  group by domain 
union all
select distinct domain,sum(if(record_status=0,1,0)) total from t_prehandle_zhigao_04 where record_status = 0  group by domain 
union all
select distinct domain,sum(if(record_status=0,1,0)) total from t_prehandle_zhigao_05  where record_status = 0  group by domain
) t1
group by domain;
九百万行数据,执行上述语句需要1分钟多一点,请问是否正常,能否更快

解决方案 »

  1.   

    select domain,sum(count)
    from (
    select domain,count(*) as total from t_prehandle_zhigao_01 where record_status=0 group by domain
    union all
    select domain,count(*) as total from t_prehandle_zhigao_02 where record_status=0 group by domain
    union all
    select domain,count(*) as total from t_prehandle_zhigao_03 where record_status=0 group by domain
    union all
    select domain,count(*) as total from t_prehandle_zhigao_04 where record_status=0 group by domain
    union all
    select domain,count(*) as total from t_prehandle_zhigao_05 where record_status=0 group by domain
    ) as t1
    group by domain同样的结果,应该会快一些。
        [align=center]====  ====
    [/align]
      

  2.   

    另外可以在domain, record_status 上分别建立索引。以提高查询速度。
        [align=center]====  ====
    [/align]
      

  3.   

    全是GROUP BY ,DISTINCT 操作?一分钟多很快了。貌似你给record_status 也加了索引。
      

  4.   

    另外可以在domain, record_status 上分别建立索引。以提高查询速度。
        [align=center]====  ====
    [/align]
      

  5.   

    索引已经有了,
    另外貌似COUNT(*)没有sum(if(record_status=0,1,0))这个快
    问题是一朋友问的,我帮他写的语句,没有接触过这么大的表,不知道这个运算时间是否正常,故此一问
      

  6.   

    另外貌似COUNT(*)没有sum(if(record_status=0,1,0))这个快 实践是检验的标准,试一下看看执行时间再说吧。
        [align=center]====  ====
    [/align]
      

  7.   

    就是因为实践过,所以才这么说。其实原来是用COUNT(*)的,后来改SUM,快了10多秒
    有处理过这么大的表的吗?1分钟可以接受吗?
      

  8.   

    九百万行数据,1分钟多一点,这个速度可以接受,在DOMAIN上建立了索引,用GROUP BY 速度一般
    比较快。
      

  9.   

    就是因为实践过,所以才这么说。其实原来是用COUNT(*)的,后来改SUM,快了10多秒  试试1楼的现在是多少?
        [align=center]====  ====
    [/align]
      

  10.   

    晕,再说一遍,经过实践证明,那朋友反应的是用sum(if(record_status=0,1,0))比count(*)快10几秒
      

  11.   

    在相同的硬件条件下,新建一个数据库,将这个表COPY进去,再运行,速度也许快一点。