[pgsql-jp: 29256] Re: SQL文の SELECT について

羽生 章洋 habu @ air-beat.com
2003年 3月 1日 (土) 22:09:10 JST


naoki kishida <kishida @ fk.urban.ne.jp>さん:

羽生と申します。割り込み失礼しますm(._.)m

私見ですが、

> 「select * from 〜」としていたために、列を追加したときにその列を利用し
な
> いのにプログラムを変更する必要がある、という事態に遭遇したことがないの
で
> すが、どういった場合にそうなるのでしょうか?

Cなどでベタに配列に格納するしかなかったときには、はまった経験が
あります。配列の定義まで書き換えないと駄目で。私は最近はめっきり
JavaですがJDBC直接だとそういうことでハマることはないですね。
そういう意味では、ホスト言語次第といえるかもしれません。

# Javaでもラッパー使ってオブジェクト化を自動的にしていると
    列が追加されて困っちゃう可能性はありますね。クラスライブラリ
    次第ということでしょうけど。

まあ、性能面では、今のハードなら気にならないのでしょうけど、それでも
SELECT文の中で*をターゲットリストにインライン展開するコストという
のがありますし、チューニングという観点で見るとやはり微々たる物とは
いえ、よろしくないのでしょうね。

# 送信するSQLが短いので、その分トラフィックが楽になる、なんてのは
    むしろメリットなのかな?

あと、ちょっと凝ったJOINなどを書くと、列名の明示というのは癖をつけて
おかないと、思わぬ動作を引き起こすことがありますし(同じ列名を持つ
テーブルをいくつか扱う場合などですね)。

結果セットが不要に大きくなることによるトラフィックの負荷というのも
ありますね。不要な列のデータまでクライアント(PHPはPostgreSQLに対する
クライアントですから)側へ転送しないといけないわけで、大量のデータを
扱う場合はやはり気を使っています。

# チューニングの際に、0.01秒を絞るというようなことを結構求められるのと
    昔からチープなマシンで大量レコードを扱うシステムばかりやってきたので
    貧乏性になってるだけかも知れないです(^^;

RDBMSに優しいSQLを書こう、というのが私の主眼なのですが、その点で言うと
やはり列名を明示した方が余計なお仕事をRDBMSにやらせない分だけ、優しい
のではないかな、と思っています。

全くの私見で恐縮ですが、何かのご参考になれば幸いです。


★☆★☆★☆★ ↓↓↓知人の頑張りを応援中↓↓↓ ★☆★☆★☆★
アトピーでお悩みの方のお役に立てるかも:http://www.shittori.com/
----------------------------------------------------------------
最近、元気のない方のお役に立てるかも: http://www.genkiari.com/
★☆★☆★☆★ ↑↑↑知人の頑張りを応援中↑↑↑ ★☆★☆★☆★

================================================================
有限会社エア・ビート (http://www.air-beat.com/)
有限会社エア・ロジック(http://www.air-logic.co.jp/)
羽生 章洋            (mailto:habu @ air-beat.com)
================================================================



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