производительность postgresql — группировка по после подзапроса

#postgresql #performance #query-optimization

Вопрос:

Я изучаю PostgreSQL и думаю об одном случае, как показано ниже: если у меня есть таблица пользователей, столбцы-идентификатор пользователя, имя пользователя, год, месяц, день, транзакция_счет. И индекс таблицы (год, месяц, день, имя пользователя)

если у нас 1 миллиард пользователей, могу ли я написать свой запрос следующим образом :

 select t1.user_name, sum(t1.transaction_amount) total_txn
(
-- sub query
select year, month, day, user_name, transaction_amount from user where year=2021 and month = 3 and day = 5 
) t1. 
group by t1.year, t1.month, t1.day, t1.user_name
order by total_txn desc
limit 10, 10

 

Могу ли я сказать, что подзапрос должен быть «получить меньший набор данных», чтобы моя группа по порядку и по порядку могла быть выполнена для меньшего набора данных ? Или весь запрос должен сканировать полную таблицу ?

Спасибо

Комментарии:

1. Запустите объяснить анализ вашего запроса. Затем перепишите запрос без подзапроса, а также запустите объяснение. Сравните разницу. Примечание: Explain analyze на самом деле запрос выполняется до завершения, поэтому это может занять некоторое время.

2. Не храните year, month, day в отдельных столбцах. Вместо этого используйте a DATE или a TIMESTAMP .