[pgsql-jp: 33286] Re: 最大値の抽出について
TANIDA Yutaka
tanida @ sra.co.jp
2004年 6月 16日 (水) 11:01:59 JST
谷田です。結論が出ているようですが
On Wed, 16 Jun 2004 09:13:25 +0900
planet-m <mtakahashi @ tanseisha.co.jp> wrote:
> たかしです。
> 実際に使用するケースでは重複した最大値も有りそうなので、
> >select * from hoge where data in(select max(data) from hoge)
> これでいけそうです。
参考までにですが、このケースの7.3での最速解は
select
id,data
from
hoge
natural inner join
(select data from hoge order by data desc limit 1) hoge_max ;
ですね。ただし、hoge.dataにもインデックスを張っておく必要があります。ポ
イントは2点
・max,minはorder by/limitへの書き換えが効き、その場合は可能ならインデッ
クスが使われる。[pgsql-jp:33274]でも言及されています。インデックスを張ら
ない場合、select max()の方が速いように思います。
・静的な副問い合わせをwhere句に持っていくのは、7.3までは非常に遅い。これ
は7.4で改善されています。
偶然ではありますが、この問題はPostgreSQLのチューニングを考える上で、実に
良いですね。参考にさせてもらいます。
--
TANIDA Yutaka <tanida @ sra.co.jp>
pgsql-jp メーリングリストの案内