
No.4ベストアンサー
- 回答日時:
歴然とした差はないでしょうが、NVL(項目A,'0') に関数インデックスが張られていない限り、処理2の方が高速になるでしょう。
まず、処理1も処理2も全表走査になりますので、実行計画には差がありません。
解析時間については、NVL(項目A,'0') に関数インデックスが存在するかどうかを調査する時間を考慮すると処理2の方が速いかもしれません。(ミリ秒レベルの差もあるかどうかは分かりませんが)
次に、更新量ですが、処理1の場合、項目Aが NULL の場合だけでなく、'0' の場合も更新対象になってしまうため、項目Aが '0' であるレコードが多い場合は若干遅くなるかもしれません。(これはミリ秒の世界でしょうが)
さらに、処理1の場合は、項目Aの全ての行に対して NVL 関数を適用しなければならないのに対して、処理2では、単純に項目Aが NULL であるかどうかを比較するだけで済んでしまいます。(これもミリ秒の世界でしょうが)
回答、ありがとうございます。
処理2の方が効率的ですが、その差はわずかしかない
という事がわかりました。
更新量はそんなにない(せいぜい10万件)ので、
他のPGMと同じように処理1で作業を進めたいと思います。
No.5
- 回答日時:
まず、インデックスですが、
テーブルAの項目Aにインデックスがはってあっても、
この両SQLともインデックスは使用されません。
ですので、処理レコード数が
そんなに多くない場合はたいして処理速度は変わらないです。
また、
「WHERE NVL(項目A,'0') = '0'」 と
「WHERE 項目A IS NULL」
の速度を比較する指標値というのは存在しません。
本当にどちらが早いかを知るには、
実際にデータを用意しスクリプトをかまして時間を測定するのが
手っ取り早いです。
数千万件のデータを用意して試すと
少しは違いが出てくるかと思います。
(何ミリ秒程度の違いだと思いますが)
回答、ありがとうございます。
処理2の方が効率的ですが、その差はわずかしかない
という事がわかりました。
更新量はそんなにない(せいぜい10万件)ので、
他のPGMと同じように処理1で作業を進めたいと思います。
(レスポンスにシビアではない業種なので(笑))
No.3
- 回答日時:
処理1のケースでは、ファンクション索引が ”NVL(項目A,'0')"対して存在するなら
索引検索されますが、そうでなければ、全表検索。
処理2は、たぶん全表検索。
結局、全表検索同士であるなら、nvl関数の微妙なオーバーヘッドだけの
違いでしかないように思います。
実行計画で比較してみてください。
回答、ありがとうございます。
処理2の方が効率的ですが、その差はわずかしかない
という事がわかりました。
他のPGMを見るとこのシステムでは処理1を使っているので、
この方法で作業を進めたいと思います。
No.1
- 回答日時:
処理2の方が私も効率よく処理が出来ると思います。
処理1では、項目Aをnull と 0の場合nvlで変換している為、通常のインデックスを使用しないと思います。
(インデックスでNVL(項目A,'0') を作成していれば使えると思います。)
処理2では is null を使用しているので、null項目をインデックスから取得していると思いますので、こちらが効率的だと思います。
また、更新件数も変わってきます。
(処理1の方が更新件数多)
間違っていれば、誰かフォローください。
回答、ありがとうございます。
処理2の方が効率的ですが、その差はわずかしかない
という事がわかりました。
他のPGMを見るとこのシステムでは処理1を使っているので、
この方法で作業を進めたいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- JavaScript html javascriptにてWeb SQLを操作したい。 2 2022/12/16 17:43
- その他(プログラミング・Web制作) Windowsのバッチファイルについてご教示ください 5 2023/07/25 20:23
- MySQL UPDATE my_items SET item_name '赤い,甘い,ケーキ' WHERE id 1 2023/01/03 09:52
- Oracle SQL update方法 2 2022/06/22 14:07
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
- Access(アクセス) access フォーム 大分類、小分類 1 2022/08/11 18:03
- SQL Server SQLについて WITH句とサブクエリの使い分けは何でしょうか? 処理速度に違いがありますか? 1 2022/11/21 11:10
- 病院・検査 動作性IQの低さについて 1 2023/03/23 23:41
- Access(アクセス) アクセス テーブルの空白を変数に置換するボタンが作りたい 4 2022/07/08 11:19
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
他の処理でselectさせないよう...
-
RDBのテーブル種類の違い
-
同じSELECT文同士でのデ...
-
トランザクションのデータ件数...
-
DELETE文でFROM句を省略した場合
-
CLOB型へのINSERT
-
ORA-00959: 表領域'****'は...
-
ACCESS 複数テーブル・複数フィ...
-
SQL*Loaderで、データを加工し...
-
データを削除しても表領域の使...
-
Viewにインデックスは張れ...
-
jspのプログラムについて
-
Access レコードを追加できませ...
-
異なるスキーマからデータを抽...
-
Data Pump で大量データインポ...
-
大量データの取得処理について
-
viewのバックアップ
-
特定のスキーマのテーブルを一...
-
INDEXの無効化
-
postgreSQLのint型は桁数指定が...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DELETE文でFROM句を省略した場合
-
他の処理でselectさせないよう...
-
object browser で処理を中断す...
-
RDBのテーブル種類の違い
-
同じSELECT文同士でのデ...
-
PL/SQLの平行処理について
-
年度毎にシーケンスの初期化?
-
[性能改善]AccessのDBに大量の...
-
accessでイベントを中止するよ...
-
C#でトランザクション開始後参...
-
処理速度の見積もり時間について。
-
Oracleから見たOracleの優位性(...
-
チューニング対象のSQLの見つけ...
-
カーソルについて
-
統計情報の取得=コミットですか?
-
Access2013で操作ログを残した...
-
ロングトランザクションについて
-
処理が終わったり終わらなかっ...
-
同一レコード更新時の排他制御
-
トランザクションのデータ件数...
おすすめ情報