sql >> データベース >  >> RDS >> Oracle

WHERE句のDECODE()ステートメントのパフォーマンスチューニング

    次のようにコードを書くことをお勧めします:

    SELECT SUM(dd.amt)
    FROM db JOIN
         dd
         ON db.id = dd.dsba_id
    WHERE dd.nd_id = xxxxxxx AND
          dd.a_id = 'xxxxx-xx' AND
          (db.v_id = xxxxxxxxx OR db.code = 'COMPLETE') AND
          db.datet >= trunc(sysdate, 'YEAR');
    

    このクエリでは、次のインデックスをお勧めします:

    • db(nd_id, a_id, id, datet, code)
    • dd(dsba_id, datet, v_id)

    上記のクエリへの変更:

    • 決して FROMではカンマを使用します 句。常に適切で明示的な標準を使用してください 、読み取り可能なJOIN 構文。 (ただし、これはパフォーマンスには影響しません。)
    • decode() 従うのはかなり難しいです。単純なブール値のor 同等です。
    • BETWEEN datetと仮定すると、不要です。 将来ではありません。
    • SUM(NVL()) NULLであるため、必要ありません。 値は無視されます。 NULLが心配な場合 結果として、COALESCE(SUM(dd.amt), 0)をお勧めします



    1. PHP/MySqlはjsonでutf-8文字列を検索/置換します

    2. RStudioをSQLServerに接続する

    3. Bcryptハッシュパスワードをデータベースに保存するためにどの列タイプ/長さを使用する必要がありますか?

    4. MySQLで複数列の主キーで複数の行を選択するにはどうすればよいですか?