У меня есть таблица только с тремя столбцами: id
, time
, value
У меня уже есть индекс на (id, time)
.
Теперь мне нужно ускоритьсядля недавнего запроса данных, поэтому я думаю, что мне нужно создавать новый индекс для каждого дня.
create index heat_20181001_20181003 on mytable using
brin ("id", "time") where time between '2018-10-01 00:00:00' and
'2018-10-03 23:59:59';
Но когда я запрашиваю, он показывает использование старого индекса, а новый не используется.
Запрос:
EXPLAIN ANALYZE ( select * from mytable where time between
'2018-10-01 00:00:00' and '2018-10-03 23:59:59' and "id" = '453615414');
Результат:
Index Scan using "mytable_id_579df36b7ac8aa8e_idx" on mytable
(cost=0.57..3931.98 rows=1133 width=87) (actual time=3.045..12294.511 rows=3762 loops=1)
Index Cond: ((("id")::text = '453615414'::text) AND ("time" >= '2018-10-01 00:00:00+08'::timestamp with time zone) AND ("time" <= '2018-10-03 23:59:59+08'::timestamp with time zone))
Planning time: 0.320 ms
Execution time: 12295.688 ms
(4 rows)
Как использовать индекс для запроса?Или как я могу улучшить это?