Re: Getting row with id=max(id)

From: Gerald Gutierrez <gml1(at)coldresist(dot)com>
To: <pgsql-sql(at)postgresql(dot)org>
Subject: Re: Getting row with id=max(id)
Date: 2001-06-07 19:13:50
Message-ID: 5.1.0.14.0.20010607120835.02bbbd60@coldresist.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql


At 07:31 PM 6/7/2001 +0200, Peter Eisentraut wrote:
> > SELECT * FROM mytable WHERE id=(SELECT MAX(id) FROM mytable);
> > SELECT * FROM mytable ORDER BY id DESC LIMIT 1;
>The second is generally thought to be faster, at least if you use the
>latest version of PostgreSQL.

This is quite amusing actually. To get the maximum of a column, the (much
more) convoluted way is much faster than the intuitive way:

=> explain select id from mytable order by seed desc limit 1;
NOTICE: QUERY PLAN:
Index Scan Backward using mytable _pkey on mytable (cost=0.00..794189.09
rows=5358342 width=4)
EXPLAIN
=> explain select max(id) from mytable ;
NOTICE: QUERY PLAN:
Aggregate (cost=103152.27..103152.27 rows=1 width=4)
-> Seq Scan on mytable (cost=0.00..89756.42 rows=5358342 width=4)
EXPLAIN

Perhaps if the server internally rewrote the second query into the first,
it would make the intuitive version much faster. The same can be done for
min() and perhaps other functions as well.

In response to

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message Gerald Gutierrez 2001-06-07 19:17:14 Re: Getting row with id=max(id)
Previous Message Gerald Gutierrez 2001-06-07 19:05:24 Re: Are SQL commands "atomic" ?