「DB2 先頭の1件をFETCHせずに取得する」の版間の差分
1行目: | 1行目: | ||
− | ==DB2 先頭の1件をFETCHせずに取得する== | + | ==[[DB2 先頭の1件をFETCHせずに取得する]]== |
− | [[DB2]] | | + | [[DB2]] | [[Category:DBパフォーマンス}}{{category SQL]] |
ユニークキーを満たさず、複数件取得されるデータのうち、先頭の1件のみ必要な場合など、カーソルを開いてフェッチしなくても、SELECTの末尾に以下を付与すれば1件のみ取得できる。 | ユニークキーを満たさず、複数件取得されるデータのうち、先頭の1件のみ必要な場合など、カーソルを開いてフェッチしなくても、SELECTの末尾に以下を付与すれば1件のみ取得できる。 | ||
− | FETCH | + | FETCH FI[[R]]ST 1 [[R]]OWS ONLY |
==== | ==== | ||
− | + | [http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/index.jsp?topic=%2Fcom.ibm.db2.luw.admin.perf.doc%2Fdoc%2Fc0055223.html&resultof=%22fetch%22%20%22first%22%20%22rows%22%20%22only%22%20 FETCH FIRST N ROWS ONLY 節と共に OPTIMIZE FOR N ROWS 節を使用する] | |
− | OPTIMIZE | + | OPTIMIZE FO[[R]] n [[R]]OWS 節を使用すると、アプリケーションが n 行のみを取得するよう、オプティマイザーに対して指示できます。しかし、照会では完全な結果セットが戻ります。 FETCH FI[[R]]ST n [[R]]OWS ONLY 節を使用すると、照会で n 行のみが戻るように指示できます。 |
− | + | [[DB2]]・・ データ・サーバーは、外部副選択のために FETCH FIRST n ROWS ONLY が指定されている場合に、自動的に OPTIMIZE FOR n ROWS の指定を想定しません。 FETCH FIRST n ROWS と共に OPTIMIZE FOR n ROWS を指定するようにしてください。こうすると、バッファリング操作 (一時表への挿入、ソート、またはハッシュ結合のハッシュ表への挿入など) を最初に実行せずに、参照表から行を直接返す照会アクセス・プランが促進されます。 | |
− | アプリケーションが、OPTIMIZE | + | アプリケーションが、OPTIMIZE FO[[R]] n [[R]]OWS を指定してバッファリング運用を避ける照会アクセス・プランを促進していても、結果セット全体を取得するのであれば、パフォーマンスが低下するおそれがあります。 なぜなら、結果セット全体が取得されている場合、最初の n 行を最も速く返す照会アクセス・プランが、最良の照会アクセス・プランとは限らないためです。 |
2020年2月16日 (日) 04:24時点における最新版
DB2 先頭の1件をFETCHせずに取得する
DB2 | [[Category:DBパフォーマンス}}{{category 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 行を最も速く返す照会アクセス・プランが、最良の照会アクセス・プランとは限らないためです。
© 2006 矢木浩人