[pgsql-jp: 31516] Re: PostgreSQL v.s. Access

SAKATA Tetsuo sakata.tetsuo @ lab.ntt.co.jp
2003年 11月 19日 (水) 15:47:54 JST


こんにちは。坂田です。

> パイプ喫いの中川です。
> 
> 	坂田さんが
> 	11月19日11時40分に発信された
> 	「[pgsql-jp: 31504] Re: PostgreSQL v.s. Access」こと
> 	<3FBAD82C.3090907 @ lab.ntt.co.jp>より
>
>>  気になるのは、1回joinして求めた表の内容を、再度求めているという点です。
>>  (無駄ですよね)
>>  
>>  これを回避するには、最初のEx.1で求めた問い合わせ結果をカーソルで読み出しつつ、
>>  t1から該当する行を取り出してバックアップし、完了後に削除する、という方法があります。
>>  
> 
>   たとえ2回 join することになったとしても、カーソルを使わずに
> SQL でデータを集合として扱う方が速い ( リレーショナル・データベース
> とはそのように最適化されている)、と私は思っていたのですが、
> 単なる思い込みでしょうか?

2回joinすることを気にしたのは、それらが、まったく同一の結果を求める処理に
なっているためです。カーソルを使うことで、1回目の処理結果がカーソルという
形でキャッシュされることを期待しています。

# ただし、PostgreSQLではカーソル経由の更新が出来ないようですね

実行速度の優劣という点では、これらはDBMSでの実装に大きく左右されると
思います。PostgreSQLでの優劣については、残念ながら、坂田も知りません。

# 逆に、2つのSQL問い合わせがまったく同一の処理を含んでいる場合、
# 一度処理した結果をキャッシュしておいて、2度目には処理をサボる、という
# 実装が出来れば、2度SQL文を発行しても処理上の無駄は回避されるでしょう。
# 結構難しいと思うのですが、商用のDBMSだとこうした機能を実装しているかも
# 知れません。

ご参考になれば幸いです。
-- 
坂田 哲夫@NTT サイバースペース研究所
sakata.tetsuo _at_ lab.ntt.co.jp
SAKATA, Tetsuo. Yokosuka JAPAN.




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