
抽象的な話で非常に恐縮なのですが、
ストアドの中で行う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時間弱)の短縮になり、決して馬鹿にはできません。
妙な質問ですが、良策があればご教授ください。
No.3ベストアンサー
- 回答日時:
あ、ちょっと読み間違いしてました。
ストアドの中の処理を更にサブプロシージャにするということなんですね。
それだと、メンテナンスの面では意味があると思いますけど、処理スピードを上げるという意味では疑問に思います。サブプロシージャの呼び出しのオーバーヘッドがあると思うので、サブプロシージャにしない場合に比べて、少し遅くなるんじゃないかと推測します。
No.2
- 回答日時:
SQL Serverのストアドの経験はありますが、
このケース(ストアドの中のストアド)は初めてなので一般人で回答します。
で、ご質問ですが、あまり意味がないと思われます。
インデックスのつけ方や、SQLの見直し、
たとえば不要なレコードを処理対象からはずす
などを進めたほうが良いのではないでしょうか。
もしどうしてもというのであれば、テストPGを
作成し、実行時間を測定するしかありませんね。
No.1
- 回答日時:
ストアドにすれば、多少は速くなるような気はします。
ストアドじゃなくて、1回1回SQLを発行すると、SQL-Server は SQL を受け取る度に SQL の構文解釈をしてコンパイルすると思うんですけど、ストアドにしておけば、1回1回、構文解釈する必要がないですからね。
あと、SQL-Server は
INSERT INTO ~ SELECT ~ FROM ~
の構文は使えないんでしょうか?
SELECT と INSERT を別々の SQL 文にするより、こっちの方が効率がいいと思います。
有難うございます。
同じようなことをしている個所がいくつもあったので、
それをストアド化することにしました。メンテナンスも簡単になりますしね。
ちなみに、SELECTとINSERTはあくまで例であり、実際に行っているわけではないので悪しからず。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQL Serverトリガの中でDMLの種...
-
SQLServer 分散トランザクショ...
-
「マスタ」と「テーブル」の違...
-
accessで移動平均する方法
-
ACCESS2000のテーブル構造
-
請求と入金のテーブルの作成の...
-
VBAの実行時エラー'2522'について
-
SQLで○○の値以外を持っているレ...
-
オラクルではできるのにSQLSERV...
-
重複するキーから一番古い年月...
-
ACCESSのODBCリンクテーブルに...
-
SI Object Browserのテーブルス...
-
ACCESS2007 フォーム 「バリア...
-
主キーにインデックスは貼らな...
-
行方向のデータを横に並べる
-
Access カレントレコードがあり...
-
Access VBA [リモートサーバー...
-
ビューで引数を使いたい
-
コンボボックスで入力したもの...
-
数百万件レコードのdelete
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQLServer 分散トランザクショ...
-
ストアド、トリガーの同時呼出
-
トリガが完全にかからない
-
ストアドプロシージャの多用で...
-
エクセルアドインの使用方法に...
-
SQL Server INSERTのトリガで採番
-
SQL Serverトリガの中でDMLの種...
-
ストアド更新履歴
-
EXCELのマクロ
-
ストアドプロシージャーのパラ...
-
NETWORKDAYS関数について
-
mdbでトリガはできますか?
-
ストアドでXMLファイルを読込む...
-
SQLでORを略す方法
-
ストアドプロシージャでのファ...
-
「マスタ」と「テーブル」の違...
-
accessで移動平均する方法
-
請求と入金のテーブルの作成の...
-
SQLで○○の値以外を持っているレ...
-
ACCESS2000のテーブル構造
おすすめ情報