sql棘手的查询与不同

时间:2011-08-19 08:36:17

标签: sql sql-server tsql

任何人都可以在没有明确条款的情况下帮助我重写此查询吗?

   select     
       a.rec_type ,
       count(distinct a.a_tel_id) as count_distinct,       
       a.time_key as hour 
   from v_f_view as a with (nolock)
   group by rec_type,time_key

我对执行计划感到愤怒,这个查询花了太长时间,我想优化它。

查询计划:http://postimage.org/image/p1myi9tw/

3 个答案:

答案 0 :(得分:2)

您是否将rec_type,time_key索引为关键字?这是必须的。

答案 1 :(得分:2)

如果a_tel_id有重复并且您想将它们统计为一个,那么您无法以某种方式神奇地删除不同来优化它。

您可能会尝试在分组的列上添加索引。

答案 2 :(得分:2)

索引

您的问题不是DISTINCT子句,而是缺少索引。 DISTINCT子句可以替换为两个GROUP BY子句,但这很可能会遭受相同的性能损失。

SQL语句

SELECT  a.rec_type
        , COUNT(*) as count_distinct
        , a.time_key as hour
FROM    (        
          SELECT a.rec_type
                  , a.a_tel_id
                  , a.time_key
          FROM    v_f_Logicacdrs21 a        
          GROUP BY
                  a.rec_type
                  , a.a_tel_id
                  , a.time_key
        ) a                  
GROUP BY
        a.rec_type
        , a.time_key