вы сравниваете дату «date (start_datetime at TIME ZONE 'UT C')» со строкой «2020-05-01», что предотвратит использование индекса. может помочь:
SELECT user_id, project_id, office_id, SUM(duration) AS tDuration
FROM users
WHERE date(start_datetime at TIME ZONE 'UTC') = TO_DATE('2020-05-01','YYYY-MM-DD')
GROUP BY project_id, user_id, office_id;
(часовой пояс может быть добавлен в to_date)
Но действительно ли вам нужно преобразование часового пояса? если столбец хранит только дату, используйте его напрямую (избегая индекса на основе функций, что позволяет улучшить статистику / оптимизацию):
CREATE INDEX i1_users on users (start_datetime, project_id, user_id, office_id) include (duration);
SELECT user_id, project_id, office_id, SUM(duration) AS tDuration
FROM users WHERE start_datetime = to_date('2020-05-01','YYYY-MM-DD')
GROUP BY project_id, user_id, office_id;
Если start_datetime содержит истинную метку времени:
CREATE INDEX i1_users on users (date_trunc('day',start_datetime), project_id, user_id, office_id) include (duration);
SELECT user_id, project_id, office_id, SUM(duration) AS tDuration
FROM users WHERE date_trunc('day',start_datetime) = to_date('2020-05-01','YYYY-MM-DD')
GROUP BY project_id, user_id, office_id;