
抽象的な話で非常に恐縮なのですが、
ストアドの中で行う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も見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLServer 分散トランザクショ...
-
エクセル、セルにリスト表示させる
-
効率的なインデックスのつけ方は?
-
cron設定について
-
Accessのテーブル設計について...
-
インデックスを調べる方法は?
-
Accessのコンボボックスの使い...
-
Movable TypeとNamazuについて
-
MySQL+PHP 特定レコードの更新...
-
SQL結合条件
-
Access97で数値型からテキスト...
-
ACCESS2007 重複について
-
アクセス97で重複データのときに
-
SELECT FOR UPDATE について
-
デッドロックについて
-
MySQLのON DUPLICATE KEY UP
-
お薦めのインデックスプリント...
-
マテリアライズドビューについて
-
ACCESS2007 フォーム 「バリア...
-
intel 945Pチップセットのパフ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQLServer 分散トランザクショ...
-
エクセルアドインの使用方法に...
-
ストアド、トリガーの同時呼出
-
ストアドプロシージャでのファ...
-
ストアド更新履歴
-
ストアドプロシージャの多用で...
-
トリガが完全にかからない
-
EXCELのマクロ
-
ストアドプロシージャーのパラ...
-
SQLServer7.0 重大な例外「EXCE...
-
ストアドでコンピュータ名の取得
-
ワードを開くと「オブジェクト...
-
SQL Server INSERTのトリガで採番
-
SQL鯖2000ストアドでの定数
-
SQLでORを略す方法
-
ソリューションエクスプローラ...
-
ストアド(PL/SQL)でログイン処...
-
SQL2000でのTRUNCATE TABLE
-
ストアドプロシージャ
-
SQL Serverトリガの中でDMLの種...
おすすめ情報