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