Повышение совокупной производительности PostgreSQL

Как лучше всего увеличить скорость запроса в PostgreSQL, выполняющего агрегирование MAX (id) ?

У меня есть небольшое количество записей, связанных с идентификатором, которые я могу COUNT () за секунду, например

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))"
6
задан Cerin 20 February 2011 в 22:18
поделиться