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.
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" ? |