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

T.Masuda tmasuda @ msg.biglobe.ne.jp
2005年 3月 19日 (土) 06:17:12 JST


マスダと申します。

数百万行ある以下のテーブルについて、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を早くする方法はありますでしょうか。

宜しくお願い致します。




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