[pgsql-jp: 37443] Re: SQLの実行速度について

Yoshio Kano kano @ arcadia21.com
2006年 8月 22日 (火) 10:23:29 JST


中井様

お返事ありがとうございます。
加納です。

> 更新の頻度がわからないのですが、最新データにフラグを付ける手も
> あるんではないかと思ったのですがいかがでしょうか。
> 最新のフラグを付けてinsertする前に、既存の最新のフラグを落とす
> (update)するだけなので、そんなにコストも掛からないのではないか
> と思います。もちろん最新フラグと商品IDにインデックスをつけます。
更新の頻度は高くありませんので、私も構造的に同様の事を考えました。
先に示しているSQLでWHERE句を指定すると検索速度が劇的に
速くなるという現象がありましたので。
※もちろんWHERE句の内容にもよります。
 SELECT ... FROM
 (SELECT MAX(id) AS id,itemid FROM history WHERE status=0
  GROUP BY itemid ) AS t1
 LEFT JOIN history AS t2 ON (t2.id = t1.id)

ただ、クライアントより過去の日付の時点での状態をスナップショット
のように見たい!という要望がありまして・・・(涙)
この方法だと最新のデータには有効ですが、過去の時点での最新データ
検索時には適用できなくなってしまいます。


> 実は、データ件数は少ないのですが似たようなことがありました。
> 検索速度を上げるために、履歴データ表と最新のものだけのデータ表を
> 分けたのですが、今でも正しかったのかどうか悩んでいます。
実は私も、一部正規化を崩して、商品マスタに最新の状態を保存する
ようにしようかな、と思っています。こうすればとりあえず最新の場合
のみには検索速度は確保できるかな、と。
ただ、どうにもスマートな方法ではありませんので、悩んでいる次第です。

トレーサビリティなどはやってます(?)ので、よくあるシステムだとは
思いますが、どうやっているのか非常に気になるところです。





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