トップ 差分 一覧 ping ソース 検索 ヘルプ PDF RSS ログイン

DB2 先頭の1件をFETCHせずに取得する



目次



記事一覧

キーワード

DB2 先頭の1件をFETCHせずに取得する

[DB2][DBパフォーマンス][SQL]
ユニークキーを満たさず、複数件取得されるデータのうち、先頭の1件のみ必要な場合など、カーソルを開いてフェッチしなくても、SELECTの末尾に以下を付与すれば1件のみ取得できる。


FETCH FIRST 1 ROWS ONLY


FETCH FIRST N ROWS ONLY 節と共に OPTIMIZE FOR N ROWS 節を使用する

OPTIMIZE FOR n ROWS 節を使用すると、アプリケーションが n 行のみを取得するよう、オプティマイザーに対して指示できます。しかし、照会では完全な結果セットが戻ります。 FETCH FIRST n ROWS ONLY 節を使用すると、照会で n 行のみが戻るように指示できます。

DB2® データ・サーバーは、外部副選択のために FETCH FIRST n ROWS ONLY が指定されている場合に、自動的に OPTIMIZE FOR n ROWS の指定を想定しません。 FETCH FIRST n ROWS と共に OPTIMIZE FOR n ROWS を指定するようにしてください。こうすると、バッファリング操作 (一時表への挿入、ソート、またはハッシュ結合のハッシュ表への挿入など) を最初に実行せずに、参照表から行を直接返す照会アクセス・プランが促進されます。

アプリケーションが、OPTIMIZE FOR n ROWS を指定してバッファリング運用を避ける照会アクセス・プランを促進していても、結果セット全体を取得するのであれば、パフォーマンスが低下するおそれがあります。 なぜなら、結果セット全体が取得されている場合、最初の n 行を最も速く返す照会アクセス・プランが、最良の照会アクセス・プランとは限らないためです。



YAGI Hiroto (piroto@a-net.email.ne.jp)
twitter http://twitter.com/pppiroto

Copyright© 矢木 浩人 All Rights Reserved.