Jonas Henriksen wrote:
>>> explain analyze SELECT max(date_time) FROM data_values;
> Goes fast and returns:
In prior postgres versions, the planner could not take advantage of
indexes with max() (nor min()) calculations. A workaround to this was
(given an appropriate index) a query like:
select date_time from data_values order by date_time desc limit 1;
The planner in recent versions has been upgraded to recognize this case
and basically apply the same workaround automatically. This is shown by
the "Index Scan Backward" and "Limit" nodes in the plan you posted.
>>> explain analyze SELECT max(date_time) FROM data_values GROUP BY
> data_logger_id;
I cannot think of a workaround like above that would speed this up. The
planner modifications that work in the above case probably don't handle
queries like this in the same way.
> Tha table contains approx 765000 rows. It has three distinct
> data_logger_id's. I can make quick queries on each of them using:
> SELECT max(date_time) FROM data_values where data_logger_id=1
If your 3 distinct data_logger_id will never change (or if you can
handle code changes if/when they do change), the following might provide
what you are looking for:
select max(date_time) from data_values where data_logger_id=1
union all
select max(date_time) from data_values where data_logger_id=2
union all
select max(date_time) from data_values where data_logger_id=3
If that works for you, you may also be able to eliminate the
(data_logger_id, date_time) index if no other queries need it (i.e. you
added it in an attempt to speed up this specific case).
Hope this helps.
Andrew