==[[DB2 SELECTステートメント最適化]]==[[DB2]] | [[Database]] | {{category [[Category:DBパフォーマンス}}{{category SQL}}]]
===Link===
====SELECT====
!内容
|-
|FOR FO[[R]] UPDATE
|その後に置く UPDATE ステートメントで更新できる列を指定
|-
|FOR READFO[[R]] [[R]]EAD/FETCH ONLY
|戻される列を読み取り専用
|-
|OPTIMIZE FOR FO[[R]] n ROWS[[R]]OWS
|全結果セットの中の最初の n 行の検索を優先
|-
|FETCH FIRST FI[[R]]ST n ROWS [[R]]OWS ONLY
|指定された数の行だけを検索
|-
|DECLARE CURSOR DECLA[[R]]E CU[[R]]SO[[R]] WITH HOLD
| 一度に 1 つずつ行を検索
|-
*可能な限り、数値データ・タイプの変換はしない
*可能なら、以下のデータ・タイプを使用
**短い列では、VARCHAR 型ではなく、CHAR 短い列では、VA[[R]]CHA[[R]] 型ではなく、CHA[[R]] 型
**浮動小数点数や 10 進数ではなく、整数
**文字列型ではなく、日時
**文字列型ではなく、数値
*DISTINCT または ORDER O[[R]]DE[[R]] BY などの文節や操作を、必要でなければ省略
*複数の述部文節に同じ列が存在する場合には、 IN リストを使用することを考慮します。大きい IN リストをホスト変数と共に使用すると、ホスト変数のサブセットのループインでパフォーマンスが向上する可能性があります
*応答セットを必要な行のみに制限する述部を使用
*必要な行数が戻される行数の合計よりかなり少なくなる場合には、 OPTIMIZE FOR FO[[R]] を指定*検出する行数が少ない場合には、 OPTIMIZE FOR FO[[R]] k ROWS [[R]]OWS 文節だけを指定*行ブロッキングを利用するには、 FOR READ FO[[R]] [[R]]EAD ONLY または FOR FO[[R]] FETCH ONLY 文節を指定してパフォーマンスを改善(検出された行には排他ロックがかけられない)*位置指定の更新を使用して更新するカーソルに対しては、 FOR FO[[R]] UPDATE OF 文節を指定して、データベース・マネージャー が初めにより適切なロッキング・レベルを選択して、発生する可能性のあるデッドロックを回避できるようにします*検索済み更新を使用して更新するカーソルに対しては、 FOR READ FO[[R]] [[R]]EAD ONLY および USE AND KEEP UPDATE LOCKS 文節を使用して影響を受ける行を強制的に U ロックすると、デッドロックを回避し、行ブロッキングを引き続き使用できます
*値を比較するとき、同じデータ・タイプの項目を使うようにする
*表を結合するには、結合述部を使用します。結合述部とは、1 つの結合において異なる表の 2 つの列を比較することです
*結合述部内で列に対して索引を定義し、それによって、その結合をさらに効率的に処理できるように
*可能なら、結合述部で式または OR O[[R]] 文節を使用しない