Я не специалист по БД, поэтому вопрос =)
Как оптимизировать такое:
select count(DISTINCT userid)
from users
where date_trunc('month',login_date)=date_trunc('month','2012-01-12'::date)
Количество строк в таблице меньше 1,5 миллиона.У меня есть индекс на login_date, хотя время выполнения запроса такое же, как и без него.Также поле ИД пользователя является первичным ключом.
На сервере этот запрос занимает более 2000 мс.Первый парень, который может помочь добиться максимальной производительности, получит репутацию ++: D
---------------- a'b'c'd'e'f 'g'h 'SOLUTION ----------------------------------
CREATE OR REPLACE FUNCTION my_date_trunc_month(some_date DATE)
RETURNS DATE
AS $$
BEGIN
return date_trunc('month',$1);
END;
$$LANGUAGE plpgsql
IMMUTABLE;
CREATE INDEX computedIdx ON gameuser_daily_activity (my_date_trunc_month(login_date));
select count(DISTINCT gameuser_fk) from gameuser_daily_activity where my_date_trunc_month(login_date)=my_date_trunc_month('2012-01-12'::date)
И этозанимает 110 мс:)