У меня проблема с очень медленным выполнением запроса в моей таблице psql, которая имеет 145 602 995
строк (да 145+ миллионов). У меня созданы индексы, но даже самый простой запрос может выполняться очень долго ... Например, запрос типа SELECT COUNT(*) FROM events;
занимает 708 секунд (~ 12 минут).
У меня есть столбец с именем org_id
, в котором есть индекс, и когда я пытаюсь выполнить запрос, например:
EXPLAIN ANALYZE SELECT COUNT(*) FROM events WHERE org_id = 1;
Aggregate (cost=8191.76..8191.77 rows=1 width=8) (actual time=9.758..9.758 rows=1 loops=1)
-> Index Only Scan using org_id on events (cost=0.57..8179.63 rows=4853 width=0) (actual time=1.172..9.729 rows=48 loops=1)
Index Cond: (org_id = 1)
Heap Fetches: 48
Planning time: 0.167 ms
Execution time: 9.803 ms
он использует индекс org_id
, но предполагаемая стоимость была огромной.
При увеличении числа org_id
время выполнения увеличивается. Вероятно, это связано с меньшим количеством записей для org_id
с меньшими числами. Когда я попадаю в org_id = 9
, где много записей, он перестает использовать индекс org_id
и вместо него использует Bitmap Heap Scan
и Bitmap Index Scan
.
EXPLAIN SELECT COUNT(*) FROM events WHERE org_id = 9;
Aggregate (cost=10834654.32..10834654.33 rows=1 width=8)
-> Bitmap Heap Scan on events (cost=147380.56..10814983.35 rows=7868386 width=0)
Recheck Cond: (org_id = 9)
-> Bitmap Index Scan on org_id (cost=0.00..145413.46 rows=7868386 width=0)
Index Cond: (org_id = 9)
Есть ли способ улучшить скорость с такими большими столами? Еще одна дополнительная информация - в этой таблице 11 столбцов, один из которых имеет тип jsonb NOT NULL
. Просто упомяну. Может быть, это важно.
EDIT:
EXPLAIN (ANALYZE, BUFFERS) SELECT COUNT(*) FROM events;
Aggregate (cost=12873195.66..12873195.67 rows=1 width=8) (actual time=653255.247..653255.248 rows=1 loops=1)
Buffers: shared hit=292755 read=10754192
-> Seq Scan on events (cost=0.00..12507945.93 rows=146099893 width=0) (actual time=0.015..638846.285 rows=146318426 loops=1)
Buffers: shared hit=292755 read=10754192
Planning time: 0.215 ms
Execution time: 653255.315 ms