抽象的な話で非常に恐縮なのですが、
ストアドの中で行う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で質問しましょう!
似たような質問が見つかりました
- MySQL 下の画像はSQLの4大命令の性質をまとめたものであるらしいです UPDATE INSERT DELE 1 2023/06/07 15:36
- MySQL 次の時間帯の勝率の合計を求めるSQL文 1 2023/07/04 17:12
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- PHP クエリObjectをforeachで回す時に、次のレコードへ移動せずに次のレコードを取得したい 2 2022/07/28 15:29
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- Visual Basic(VBA) データのある範囲を選択するVBAについて 2 2022/09/03 00:20
- MySQL mysqlで INSERT と SELECTの用途は 1 2022/04/01 00:45
- Excel(エクセル) エクセルのVBAにショートカットキーの割り当て 3 2022/07/13 14:19
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- 物理学 光速度に近い速度で移動しても、時間や時計の動きが遅くなる?等は、あり得ない。 3 2022/09/24 00:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ストアド更新履歴
-
SQLServer 分散トランザクショ...
-
SQLServerでOracleシーケンスの...
-
エクセルアドインの使用方法に...
-
ソリューションエクスプローラ...
-
usbでえーー
-
トリガが完全にかからない
-
「マスタ」と「テーブル」の違...
-
accessのロック
-
ACCESS 一番最新の日付の金額...
-
ACCESSのSQLで、NULLかNULLでな...
-
3つ以上のテーブルをUNIONする...
-
重複するキーから一番古い年月...
-
[ BETWEEN ] vs [ >= AND <= ]
-
エクセルでテーブルの最終行が...
-
Accessにインポートしたら並び...
-
SELECT時の行ロックの必要性に...
-
Access VBA [リモートサーバー...
-
Accessで重複したデータを一件...
-
ユニオンクエリで繋げられるテ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQLServer 分散トランザクショ...
-
エクセルアドインの使用方法に...
-
ストアドプロシージャでのファ...
-
トリガが完全にかからない
-
ストアド更新履歴
-
ストアドプロシージャーのパラ...
-
ストアド、トリガーの同時呼出
-
SQL Server INSERTのトリガで採番
-
ストアドプロシージャの多用で...
-
SQLServer7.0 重大な例外「EXCE...
-
ソリューションエクスプローラ...
-
T-SQLで一時テーブルの名前を毎...
-
SQL Serverトリガの中でDMLの種...
-
ストアド(PL/SQL)でログイン処...
-
SQLServerのトリガ機能について...
-
「マスタ」と「テーブル」の違...
-
[ BETWEEN ] vs [ >= AND <= ]
-
2つのテーブルから条件に一致...
-
ACCESSのSQLで、NULLかNULLでな...
-
オラクルではできるのにSQLSERV...
おすすめ情報