小規模セットの行に対する検索の最適化
照会を満たす数千行の行だけが必要な場合は、Db2 にその検索プロセスを最適化して、指定された数の行のみを戻すように指示することができます。
このタスクについて
質問: クエリを満たす数千行の行のみが必要なことをDb2に通知するにはどうすればいいですか ?
回答: SELECT文の最適化句またはフェッチ句を使用します。
Db2は、通常、修飾するすべての行を取り出すクエリを最適化します。 しかし、場合によっては、数行を取り出したいことがあります。 例えば、ある値以上の行のうち、
最初の行を取り出すには、以下のように SELECT ステートメントをコーディングします。
SELECT column list FROM table
WHERE key >= value
ORDER BY key ASCORDER BY節を使う場合でも、Db2は最初にすべてのデータをフェッチし、フェッチ後にソートしてパフォーマンスに影響を与える可能性があります。 この方法ではなく、次のいずれかの方法で照会を作成することもできます。SELECT * FROM table
WHERE key >= value
ORDER BY key ASC
OPTIMIZE FOR 1 ROW
SELECT * FROM table
WHERE key >= value
ORDER BY key ASC
FETCH FIRST n ROWS ONLYアクセス・パスに影響を与えるために、OPTIMIZE FOR 1 ROW 文節を使用してください。 OPTIMIZE FOR 1 ROW は、最初の修飾行をすぐに戻すアクセス・パスを選択するように Db2に指示します。
FETCH FIRST n ROWS ONLY 文節を使用して、結果表の行数を n 行に制限します。 FETCH FIRST n ROWS ONLY には、次のような利点があります。
- FETCHステートメントを使って結果表からデータを取得する場合、fetch節を使用すると、Db2必要な数の行のみが取得されます。 このことは、特に分散アプリケーションの場合にはパフォーマンスに有利です。 FETCHステートメントを実行して n+1行目を取得しようとすると、Db2+ 100SQLCODEが返されます。
- FETCH 文節を SELECT INTO ステートメントで使用した場合、複数行は、取り出されません。 FETCH 文節を SELECT INTO ステートメントで使用すると、誤って複数の値をホスト変数に 選択したことが原因で生じる SQL エラーを防止することができます。
FETCH 文節を指定するものの、OPTIMIZE 文節を指定しない場合、OPTIMIZE 文節は暗黙で指定されます。 FETCH FIRSTnROWS ONLYおよびOPTIMIZE FORmROWSを指定し、mがんより小さい場合、Db2は、m行の照会を最適化します。 mがnより大きい場合、Db2はn行の照会を最適化します。