[pgsql-jp: 36916] Re: 項目毎に件数指定をしたい
Yasuhiro Shibutani
yasuhiro_shibutani @ ybb.ne.jp
2006年 3月 23日 (木) 19:14:45 JST
渋谷です。
# もういいのかもしれませんが。。。
> 渋谷さんのを実行してみますと、項目ごとに30行表示で44.7秒と
> 速かったです。
実際のテーブル定義やデータが分からないのでハッキリとはいえませんが、
まだまだ遅いと思いますね。
> SELECT "ID" FROM "table1"
> GROUP BY "ID" ORDER BY "ID"
このクエリ、HashAggregate されるとはいえ無駄なコストが毎回かかります。
"ID" が一意なテーブルはないんでしょうか?
あるならそちらのテーブルにクエリかけた方がいいです。
ないなら作ったほうがいいです。^^;
> SELECT * FROM "table1"
> WHERE "ID" = "_id"."ID"
> ORDER BY "f1" DESC LIMIT "_top_n"
こっちのクエリは複合インデックス(ID, f1)があれば、ソートも発生せず
ほとんどコストがかからないと思います。
On Wed, 22 Mar 2006 19:24:26 +0900
西村 篤史 <a2c @ lets-heart.co.jp> wrote:
> 西村@和歌山市です。
>
> > 根岸です。
> > idとf1にインデックスを貼っていても、2時間以上かかり ますか?
> >
> > 搭載メモリの量にもよりますが、postgresql.confの sort_memの値を
> > 大きくしてみては、いかがでしょう?
>
> 今使っているスペックは
> CPU :Celeron2GHz
> メモリ:256MB
> PostgreSQL 8.0.3
> RedHat9
>
> です。
> postgresql.conf にsort_mem の項目がなかったのですが、
> 勝手に追加してもいけるんでしょうか?
> RESOURVE USAGE の MEMORY の下にある work_mem の下に
> sort_mem = 4096 としてみました。
>
> Planner Method Configuration の enable_sort を true に
> して実行してみたんですが、やはり2時間かかってます。
>
> 実はview では sum集計していたのですが、相関クエリをせずに
> フツーに viewを select * した場合でも50万件の表示に106秒かかり、
> 相関クエリ実行だとやはり2時間以上かかっています。
> #画面帰ってこないので結果みてません。
>
>
> >初めまして、渋谷といいます。
> >パフォーマンスを気にされるなら plpgsql でループを使った方が
> >いいのではないかと思います。
>
> 渋谷さんのを実行してみますと、項目ごとに30行表示で44.7秒と
> 速かったです。
>
> index 通してない id と f1 での渋谷さんの実行速度については
> やってないのですが、相関クエリとファンクションを考える事が
> できました。
>
>
> 根岸さん、渋谷さん、ありがとうございました。
--
Yasuhiro Shibutani <shibutani-yxa @ necst.nec.co.jp>
pgsql-jp メーリングリストの案内