プロが教えるわが家の防犯対策術!

業務でJavaとDB(DB2)を使用しています。
最近、SQL関数を使用すべきか否かでちょっと悩んでいます。
SQL関数は確かに便利ですが、使いすぎるとレスポンスが悪くなる、ということはあるのでしょうか?
今はSQLは出来るだけシンプルにして、Javaで補っています。
(例えばGraphic項目から全角スペースを取り除く場合はSQL関数のRTRIMを使わず、DBから取り出した後にJavaで取り除く、など)
ご指導よろしくお願いします。

A 回答 (4件)

>私が知りたいのはコーディング時、SQL関数(RTRIM、nullだったら別の値に置き換えるValue関数など)をふんだんに使って問題ないのか、それともSQLは最小限にしてデータの編集などはJavaで行ったほうがいいのか、ということです。



RTRIMに関しては特に性能落ちる要素が見当たりませんので、使って良いと思いますが、後はプロジェクトでDB担当している人に聞いたほうが良いと思います。
言えるのは関数によってはインデックスを使いようがないケースが出てくるので性能が出ない場合があるということです。

どんな関数を使えばインデックスを使わないかはBtreeインデックスの仕組みを考えれば大体想像はつくと思いますが、分からないうちはアクセスパスとか見て検証すれば良いと思います。

DB得意な人から見ればSQLで解決したほうが良い問題もJAVAが得意な人から見ればJAVAで解決したほうが良いということもあると思います。

僕はDBよりなのでSQL関数はじゃんじゃん使うほうです。
    • good
    • 0
この回答へのお礼

なるほど・・・どうもありがとうございます。
今後のコーディングの指針とさせて頂きます。

お礼日時:2005/03/31 06:34

#2です。


少し補足します。

統計情報(runstatsコマンド)はとっていますか?
もしやっていない場合はrunstatsコマンドを実行することでパフォーマンスが改善する場合が多いです。

runstats on table <schema>.<table> and indexes all
    • good
    • 0
この回答へのお礼

情報、どうもありがとうございます。
ただ、私はDBのカスタマイズは業務ではやっていないです。
私が知りたいのはコーディング時、SQL関数(RTRIM、nullだったら別の値に置き換えるValue関数など)をふんだんに使って問題ないのか、それともSQLは最小限にしてデータの編集などはJavaで行ったほうがいいのか、ということです。

お礼日時:2005/03/30 23:21

概ね#1さんの言うとおりだと思いますが・・・。



RTRIM()は大概の場合インデックスを使ってくれると思います。
    • good
    • 0

使い方によります。



Aにインデックスが張ってあるとき、

○ select A from テーブル where A=RTRIM('123 ')
× select A from テーブル where RTRIM(A)='123'

下の場合、インデックスが設定されている項目に関数を使用すると、インデックスが使用されなくなります。
このため、速度低下が起こります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!