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