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