Есть таблица с пятью полями типа int. В ней несколько миллионов записей (в дальнейшем будут десятки миллионов или сотни)
Один из столбцов (word_id) проиндексирован b-tree индексом, по нему происходит поиск вида:
select * from keypoints where word_id in ( около 500-1000 значений)
Такой запрос на моем неспешном ноуте занимает 200-300с, iotop показывает, что идет чтение с диска. В результате может вернуться десятки тысяч записей. Повторно запрос выполняется много быстрее.
В конфиге postgresql менял настройки только авторизации.
Вопрос: такой запрос впринципе некорректен и не может выполняться быстро или можно что-то соптимизировать?
Update:
Вывод explain для одного where:
explain select * from keypoints where word_id=27601;
Bitmap Heap Scan on keypoints (cost=28.37..4118.23 rows=1080 width=24)
Recheck Cond: (word_id = 27601)
-> Bitmap Index Scan on keypoints_search_idx (cost=0.00..28.10 rows=1080 width=0)
Index Cond: (word_id = 27601)
(4 rows)
Time: 696,716 ms