У меня возникают проблемы с скоростью в запросе SELECT в базе данных Postgres.
У меня есть таблица с двумя целыми столбцами в качестве ключа: (int1, int2) Эта таблица содержит около 70 миллионов строк.
Мне нужно сделать два простых запроса SELECT в этой среде:
SELECT * FROM table WHERE int1=X;
SELECT * FROM table WHERE int2=X;
Эти два выбора возвращают около 10.000 строк каждый из этих 70 миллионов. Чтобы это работало как можно быстрее, я подумал об использовании двух индексов HASH, по одному для каждого столбца. К сожалению, результаты не так хороши:
QUERY PLAN
----------------------------------------------------------------------------------------------------------------------------------------
Bitmap Heap Scan on lec_sim (cost=232.21..25054.38 rows=6565 width=36) (actual time=14.759..23339.545 rows=7871 loops=1)
Recheck Cond: (lec2_id = 11782)
-> Bitmap Index Scan on lec_sim_lec2_hash_ind (cost=0.00..230.56 rows=6565 width=0) (actual time=13.495..13.495 rows=7871 loops=1)
Index Cond: (lec2_id = 11782)
Total runtime: 23342.534 ms
(5 rows)
Это пример EXPLAIN ANALYZE одного из этих запросов. Это занимает около 23 секунд. Мои ожидания - получить эту информацию менее чем за секунду.
Это некоторые параметры конфигурации postgres db:
work_mem = 128MB
shared_buffers = 2GB
maintenance_work_mem = 512MB
fsync = off
synchronous_commit = off
effective_cache_size = 4GB
Любая помощь, комментарий или мысль будут действительно оценены.
Спасибо заранее.