[pgsql-jp: 35074] Re: select のパフォーマンスについて

Yutaka tanida tanida @ sra.co.jp
2005年 3月 19日 (土) 14:02:52 JST


谷田です。

この種のパフォーマンス関連の話をするときはバージョンを提示して頂かないと、
意味のある解答が出てこないことが多いです。

On Sat, 19 Mar 2005 06:17:12 +0900
"T.Masuda" <tmasuda @ msg.biglobe.ne.jp> wrote:

> マスダと申します。
> 
> 数百万行ある以下のテーブルについて、id 毎に action の数を集計しています。
> 
> time            id  action
> yyyy/mm/dd..     1       A
> yyyy/mm/dd..     1       A
> yyyy/mm/dd..     1       B
> yyyy/mm/dd..     2       A
> yyyy/mm/dd..     2       B
> yyyy/mm/dd..     2       C
> 
> インデックスは 「id」および「id, action」 に張っています。
> 
> このとき、
>    select id, count(*) from xxx_tbl where id=1 group by id;
> は早いのですが、
>    select id, count(*) from xxx_tbl where id in (1, 2) group by id;
>    select id, count(*) from xxx_tbl where id in (1, 2, ...) group by id;
> とすると、途端に遅くなります。
> 
> 
> id にはインデックスが張ってありますし、
> 複数IDをまとめて取って来た方が早いと思うのですが、
> 1IDづづループでまわして、複数回SQLを投げた方が、何故か早いのです。
>
> Oracle や SQL Server ではこんな事は無かったと思うのですが、
> このSQLを遅くしている原因は何でしょうか。
> また、このSQLを早くする方法はありますでしょうか。

で、バージョンは7.3以下とお見受けしましたが、いかがでしょうか?

#7.4からはOR(とか、結果的に展開されるINとか)に対してもINDEXを使うよう
#になっているので、それでも使われないとなると全く別の答えが必要になって
#しまいます。


-- 
Yutaka tanida <tanida @ sra.co.jp>




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