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

抽象的な話で非常に恐縮なのですが、
ストアドの中で行うSELECTやINSERTなどの処理を
更にストアドにすることで、パフォーマンスは向上するのでしょうか?

たとえば、「テーブルAの内容を取得してテーブルBにINSERT」というストアドがあったとします。
この場合、以下のような記述になると思います。
----------------------------------
SELECT (略) FROM TBL_A
INSERT INTO TBL_B (略)
----------------------------------

このSELECT及びINSERT処理をそれぞれストアド化し、
----------------------------------
EXEC SP_A (略)
EXEC SP_B (略)
----------------------------------
とすると、わずかなりでも処理速度は向上するのでしょうか?
(極論ですが、全てのSELECT、INSERT、UPDATEをストアド化するのがベストなのでしょうか?)

現在、数百万~数千万件のレコードを処理するストアドを作成中で、処理時間の短縮が大きな課題になっています。
1件あたりの処理が0.1秒でも縮めば、10万件の処理時間は10,000秒(=3時間弱)の短縮になり、決して馬鹿にはできません。

妙な質問ですが、良策があればご教授ください。

A 回答 (3件)

あ、ちょっと読み間違いしてました。


ストアドの中の処理を更にサブプロシージャにするということなんですね。
それだと、メンテナンスの面では意味があると思いますけど、処理スピードを上げるという意味では疑問に思います。サブプロシージャの呼び出しのオーバーヘッドがあると思うので、サブプロシージャにしない場合に比べて、少し遅くなるんじゃないかと推測します。
    • good
    • 1

SQL Serverのストアドの経験はありますが、


このケース(ストアドの中のストアド)は初めてなので一般人で回答します。

で、ご質問ですが、あまり意味がないと思われます。
インデックスのつけ方や、SQLの見直し、

たとえば不要なレコードを処理対象からはずす
などを進めたほうが良いのではないでしょうか。

もしどうしてもというのであれば、テストPGを
作成し、実行時間を測定するしかありませんね。
    • good
    • 0
この回答へのお礼

有難うございます。
確かに、インデックスやクエリ文の見直しで改善するところもありました。
どうやら、修行が足りないようです…。

お礼日時:2004/04/02 09:28

ストアドにすれば、多少は速くなるような気はします。


ストアドじゃなくて、1回1回SQLを発行すると、SQL-Server は SQL を受け取る度に SQL の構文解釈をしてコンパイルすると思うんですけど、ストアドにしておけば、1回1回、構文解釈する必要がないですからね。
あと、SQL-Server は
INSERT INTO ~ SELECT ~ FROM ~
の構文は使えないんでしょうか?
SELECT と INSERT を別々の SQL 文にするより、こっちの方が効率がいいと思います。
    • good
    • 0
この回答へのお礼

有難うございます。

同じようなことをしている個所がいくつもあったので、
それをストアド化することにしました。メンテナンスも簡単になりますしね。

ちなみに、SELECTとINSERTはあくまで例であり、実際に行っているわけではないので悪しからず。

お礼日時:2004/04/02 09:33

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