
抽象的な話で非常に恐縮なのですが、
ストアドの中で行う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ランキング
-
SQLServer 分散トランザクショ...
-
ストアド、トリガーの同時呼出
-
ストアドでコンピュータ名の取得
-
「マスタ」と「テーブル」の違...
-
Accessにインポートしたら並び...
-
SI Object Browserのテーブルス...
-
Access VBA [リモートサーバー...
-
オラクルではできるのにSQLSERV...
-
ACCESSのSQLで、NULLかNULLでな...
-
重複するキーから一番古い年月...
-
ビューで引数を使いたい
-
クエリのキャンセルがいつにな...
-
3つ以上のテーブルをUNIONする...
-
SQL Server のデータをCSVファ...
-
VIEWでテーブルの集計結果...
-
SELECT文でのデッドロックに対...
-
SELECT時の行ロックの必要性に...
-
テーブル作成クエリで新テーブ...
-
PL/SQLでFROM句に変数を使いたい
-
ACCESSのODBCリンクテーブルに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQLServer 分散トランザクショ...
-
トリガが完全にかからない
-
ストアドでXMLファイルを読込む...
-
ストアドプロシージャの多用で...
-
SQL Server 2005 レプリケーシ...
-
ストアド更新履歴
-
ADOからのストアド実行でエラー...
-
SQL Serverトリガの中でDMLの種...
-
エクセルアドインの使用方法に...
-
mdbでトリガはできますか?
-
ストアド、トリガーの同時呼出
-
SQLServer7.0 重大な例外「EXCE...
-
ソリューションエクスプローラ...
-
SQLServerでOracleシーケンスの...
-
エクセルの関数で
-
SQL Server INSERTのトリガで採番
-
SQLServerのトリガ機能について...
-
SQL2000でのTRUNCATE TABLE
-
「マスタ」と「テーブル」の違...
-
3つ以上のテーブルをUNIONする...
おすすめ情報