现有一表,千万级
需要这样查询
select TO_CHAR(V_TIME,'YYYY-MM-DD')
count(*),count(distinct ip),count(distinct c_id) from a
group  by TO_CHAR(V_TIME,'YYYY-MM-DD');
执行了11s,太慢了,有什么办法可以解决?

解决方案 »

  1.   

    在V_TIME列上建一个函数索引(TO_CHAR)试试
      

  2.   

    select trunc(V_TIME) 
    count(*),count(distinct ip),count(distinct c_id) from a 
    group  by trunc(V_TIME); 
      

  3.   

    distinct 很影响效率,建议
    替换掉
      

  4.   

    根据你说的内容,我大致测试了一下,建议建立索引。
    在a表上建立:v_time,ip,c_id的索引。
      

  5.   

    业务需求上distinct和group by都无法避免,只能对TO_CHAR(V_TIME,'YYYY-MM-DD')建函数索引
      

  6.   

    同志们,不行啊,索引这个时候还是不行啊,现在数据才十万级的,以后千万级了,怎么办?
    select TO_CHAR(V_TIME,'YYYY-MM-DD') 
    count(*),count(distinct ip),count(distinct c_id) from a 
    where V_TIME  between ··and···
    group  by TO_CHAR(V_TIME,'YYYY-MM-DD'); 
      

  7.   


    不嫌麻烦的话,你就建个物化视图,指定 on commit方式。把统计压力扔给数据库去。