[pgsql-jp: 34409] Re: パフォーマンスチューニング

Tatsuo Ishii t-ishii @ sra.co.jp
2004年 12月 7日 (火) 10:09:46 JST


石井です.

> あと、DISTINCT(sort+unique)がものすごくコスト高いですよね。。

そういうことはないと思いますよ.18行の結果を1行にDISTINCTしているだけ
ですから.

以下を見るとたしかにコストが高そうですが,これは単に下位ノード(Hash
Join)のコストが上乗せされているだけです.

>    ->  Unique  (cost=61511.87..63998.42 rows=5771 width=60) (actual time=35383.207..35383.268 rows=1 loops=1)
>          ->  Sort  (cost=61511.87..61760.52 rows=99462 width=60) (actual time=35383.203..35383.205 rows=18 loops=1)
>                Sort Key: as.id, as.able_id, as.mem_id, as.feed_id, as.ldata_id, as.ts_fetch, as.ts_filter, as.ts_trigger, al."type"
>                ->  Hash Join  (cost=4516.62..50155.60 rows=99462 width=60) (actual time=6313.877..35382.972 rows=18 loops=1)

> これはたぶん、インデックスを使ってもバキュームしても、どうやっても速くはならないので・・重複した結果が出ないような設計をするとか、DISTINCTせずにも良いようにつくるか、しかないと思います。。

ここをいじってもこのケースに関してはたいして速くならない,に1票.

ただし,重複が非常に多いDISTINCTに関しては,GROUP BYに書き換えると速く
なることもあります.詳細は

http://www2b.biglobe.ne.jp/~caco/fourth_edition/index.html

の「本書を出版後に見つけた性能向上,チューニングテクニックを掲載してい
きます」でどうぞ.
--
Tatsuo Ishii



pgsql-jp メーリングリストの案内