[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 メーリングリストの案内