0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Oracleでの開発時注意点

Last updated at Posted at 2025-01-21

SQLの書き方

大文字小文字

スペース有無、大文字・小文字の違いは異なるSQL文と解釈されてしまう。
その結果、無駄な解析処理が走ってしまうので、可能な限りSQL文は一か所に集約すべき。

列名の明示的な指定

列の並び順の変更や追加の可能性がある為、全列にデータ挿入する場合でも列を明示的に指定する。
レコードの検索時は処理時間増大を抑える為、必要な列だけを指定する。
ORDER BY句では、カラム番号ではなく対象カラム名を明示的に指定する。

日付フォーマット

日付フォーマットのデフォルト (NLS_DATE_FORMAT)は変更される可能性があるので、
 明示的に日付フォーマットを指定する。TO_DATE( '19900101', 'YYYYMMDD' )

ANDやOR条件の複数指定

AND句はボトムアップ(ANDリストの最後から順) 絞込みが効くAND句はWHERE句の最後
OR句トップダウン(ORリストの最初から順) 絞込みが効くOR句はWHERE句の最初

レコードの存在チェック

副問い合わせ処理でNOT IN句を用いると内部処理が発生する為、NOT EXISTS句を使用する。

テーブルの結合

複数テーブルの結合を行うSQL文は、レコード件数の少ないテーブルをFROM句の最後に指定する。

カウント

全件数の調査時、COUNTはnullレコードがカウントされない為、COUNT(*)を使用する。

インデックス

・条件指定にNULLを用いると、インデックスは使用されずに必ず全表検索となる。
 ビットマップインデックスであれば、NULL値を条件にできる。
・条件指定にNOT EQUAL(!=)を使用すると、インデックス検索を行なわない。
 ビットマップインデックスであれば、NOT EQUALを条件にできる。
・インデックスのキー列のLIKE句において、以下の検索条件ではインデックスが使用されない。
・後方一致 : LIKE '%c'
・中間一致 : LIKE '%c%'
前方一致(LIKE 'c%')は、インデックスが使用される。
・ORDER BYでインデックスを使用するためには、以下2条件を満たす必要がある。
 ・ORDER BY句を構成する全列が同じ順序で1つのインデックスに含まれる。
 ・ORDER BY句を構成する全列がテーブル定義時にNOT NULL制約を有する。

暗黙のソート処理

以下のSQL文は暗黙的にソート処理が行われる。
Oracle任せになってしまうので、ORDER BYは書くべき。
 ・DISTINCT
 ・GROUP BY
 ・INTERSECT
 ・MINUS
 ・UNION

ヒント句

ヒント句を記述する際は、SELECT, DELETE, UPDATE, INSERTの各キーワードの後に
 /*+ ヒント句 */の形式で記述し改行する。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?