2013-03-18 6 views
0

Я использую следующий запрос для поиска количества уникальных посетителей из одной из моих таблиц за каждый день. Но это влияет на производительность. Может ли кто-нибудь предложить лучшее решение для этого. Мой текущий запрос:Лучшее решение для поиска уникальных посетителей

SELECT t.date,COUNT(DISTINCT t.uID) as unique_clicks FROM table_name t 
WHERE 
    NOT EXISTS(
     SELECT 1 
     FROM table_name t2 
     WHERE 
      t2.uID = t.uID 
      AND t2.date < (t.date) 
    ) 
GROUP BY t.date 
+0

Какова структура вашей таблицы? – MarcinJuraszek

+0

Настроить [скрипку] (http://www.sqlfiddle.com)? – hd1

+0

Зачем вам нужен предикат 'NOT EXISTS'? Почему бы просто не рассчитывать с помощью 'group by':' SELECT t.date, COUNT (DISTINCT t.uID) как unique_clicks FROM table_name t GROUP BY t.date'? –

ответ

0

Вы можете попробовать это:

SELECT 
    t.date, COUNT(DISTINCT t.uID) as unique_clicks 
FROM 
    table_name t LEFT JOIN table_name t1 
    ON t.uID=t2.uID AND t2.date < t.date 
WHERE 
    t2.uID is NULL 
GROUP BY t.date 

Я думаю, что объединение должно быть быстрее, чем EXISTS положение в данной конкретной ситуации. Или, если я понимаю логику правильно, и это:

SELECT min_date, COUNT(*) as unique_clicks 
FROM (
    SELECT 
    t.uID, min(t.date) min_date 
    FROM 
    table_name t 
    GROUP BY 
    t.uID 
) s 
GROUP BY min_date 

Пожалуйста, смотрите скрипку here.

Смежные вопросы