Таблица:
Table "public.hugetable"
Column | Type | Modifiers | Storage | Description
---------+-----------------------+-----------+----------+-------------
reqid | character varying(15) | | extended |
browser | character varying(15) | | extended |
a | smallint | | plain |
b | smallint | | plain |
metarr | smallint[] | | extended |
Количество строк: 80 миллионов
Индексы: Нет
Объясните:
testdb=> EXPLAIN (ANALYZE,BUFFERS) select b from hugetable;
QUERY PLAN
----------------------------------------------------------------------------------------------------------------------------
Seq Scan on hugetable (cost=0.00..6514286.08 rows=80000008 width=2) (actual time=0.009..598004.456 rows=80000000 loops=1)
Buffers: shared hit=472831 read=5241455
Total runtime: 674134.766 ms
metarr smallint[]
содержит 250 элементов.
Запрос занимает одинаковое количество времени с select b from hugetable where a=someval
или select metric[199] from hugetable
Технические характеристики сервера:
db.m3.xlarge
Type:Type Standard - Current Generation
vCPU:Number of virtual cores 4 vCPU
Memory: 15 GiB
Я никогда не работал с таким большим набором данных, поэтому не уверен, что 10 минут — это нормально для такого рода запросов.
На практике будет еще один столбец (datetime). Таблица будет содержать ~80 миллионов записей за 1 полный день, а запросы всегда будут иметь вид SELECT metarr[someindex] from hugetable where datetimecolumn > something and datetimecolumn <something
.
Что я могу сделать, чтобы сделать это быстрее? Кажется, что как только я добавлю столбец даты и времени и запрошу определенный период времени, это все равно займет огромное количество времени!
datetimecolumn
. - person Craig Ringer   schedule 09.10.2014SELECT pg_size_pretty(pg_relation_size('hugetable')), pg_size_pretty(pg_total_relation_size('hugetable'));
? - person Craig Ringer   schedule 09.10.2014