Какой лучший способ увеличить скорость запроса в PostgreSQL, который выполняет агрегацию MAX (id)?
У меня есть скромное количество записей, связанных с идентификатором, которые я могу СЧИТАТЬ () в секунду, например,
select count(id) as cnt from mytable where ref_id=2660
row cnt
1 2844
Однако, когда я пытаюсь найти самый последний идентификатор записи с помощью MAX (), запрос занимает почти 5 минут.
select max(id) as id from mytable where ref_id=2660
Это удивительно, потому что в остальном я обнаружил, что PG удивительно быстр с гораздо более сложными запросами. Почему такая разница во времени запросов, особенно для такого относительно небольшого количества записей? Как лучше всего улучшить эту производительность?
РЕДАКТИРОВАТЬ: Это план запроса для выше MAX () выберите:
"Result (cost=219.84..219.85 rows=1 width=0)"
" InitPlan 1 (returns $0)"
" -> Limit (cost=0.00..219.84 rows=1 width=4)"
" -> Index Scan Backward using mytable_pkey on mytable (cost=0.00..773828.42 rows=3520 width=4)"
" Filter: ((id IS NOT NULL) AND (ref_id = 2660))"