For eachというとカーソルで結果セットをぐるぐるループしながら処理するイメージがあります。処理対象が数十万件を超えるとループ処理がネックになってきますが、オプティマイズ(最適化)が適用されると一回のSQLを実行するだけになり実行効率が上がるのです。
例えば、
1.レコード削除
・For eachコマンド
For each
Where attribute = &val
Delete
Endfor
・ナビゲーションレポート
・生成されるSQL
DELETE FROM table WHERE attribute = &val
2.カウント
・For eachコマンド
For each
Where attribute = &val
&count += 1
Endfor
・ナビゲーションレポート
・生成されるSQL
SELECT COUNT(*) FROM table WHERE attribute = &val
3.集計
・For eachコマンド
For each
Where attribute = &val
&total += attribute
Endfor
・ナビゲーションレポート
・生成されるSQL
SELECT SUM(attribute) FROM table WHERE attribute = &val
4.1件取得
・For eachコマンド
For each
Where attribute = &val
&val=attribute
Exit
Endfor
・ナビゲーションレポート
・生成されるSQL
・SQLServer
SELECT TOP 1 attribute FROM table WHERE attribute = &val
・Oracle
SELECT attribute FROM table WHERE attribute = &val AND ROWNUM <= 1
0 件のコメント:
コメントを投稿