SQL сложный запрос с отличным - PullRequest
1 голос
/ 19 августа 2011

Может ли кто-нибудь помочь мне переписать этот запрос без отдельного предложения?

   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 ]

2 голосов
/ 19 августа 2011

Если у a_tel_id есть дубликаты, и вы хотите считать их как единое целое, то вы не можете оптимизировать их, каким-то волшебным образом удалив отчетливый .

Вы можете попробовать добавить индекс по столбцампо которой вы группируете.

2 голосов
/ 19 августа 2011

Индексы

Ваша проблема не в предложении 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
2 голосов
/ 19 августа 2011

У вас есть rec_type,time_key, проиндексированный в качестве ключа? Это обязательно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...