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

Kiyoshi Mizuno kiyoshi_mizuno @ mail.toyota.co.jp
2006年 8月 22日 (火) 13:46:05 JST


水野です。

> -----Original Message-----
> こんにちは田中です
> 
> > 1.最新のデータが欲しい時
> >         (0)フラグを落とす
> >         (1)各商品のMAX(ID)にフラグを立てる
> >         (2)フラグの立っているレコードを取得する
> >
> > 2.任意の時点のデータが欲しい時
> >         (0)フラグを落とす
> >         (1)WHERE句に日付条件を追加して各商品のMAX(ID)にフラグを立てる
> >         (2)フラグの立っているレコードを取得する
> 
> 横から質問です
> 稼働中のDBのフラグを操作するのは危険ではないですか?
> 
> テンポラリテーブルに、フラグのデータだけ抜き出してから検索
> などの方が安全なのでしょうか?
> 
> それともこの手の処理はロックして操作するので、問題ないのでしょうか?

「UPDATE+簡単なSELECT」と「複雑な条件のSELECT」では
どちらが速く処理できるのだろうと思って書きました。

DBにアクセスするユーザ(あるいはセッション)が複数存在する場合、
この方法では一連の処理をトランザクションで括るのは必須になりますね。
それが実害となって現れるかどうかはシステムの規模次第ですが。

書いた後で思い出したのですが、PostgreSQLの場合レコードを
書き換える毎にテーブルが肥大化するので、検索を頻繁に行う
(=フラグの書き換えを頻繁に行う)のであればフラグの書き換えで
検索を制御するのは止めたほうが良いように思えてきました。




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