ソフト削除を実装するための最良の方法は何ですか?
What Is Best Way Implement Soft Deletion
解決:
私はに傾くだろうを含むdeleted_at列 削除が行われた日時 。次に、削除に関する無料のメタデータを少し取得します。あなたのための
SELECTは行を取得するだけです
WHEREdeleted_atはNULLです
を含むビューに対してすべてのクエリを実行できますWHERE IS_DELETED = '0'句。
持っているis_deleted列は、かなり適切なアプローチです。 Oracleの場合、パフォーマンスをさらに向上させるには、にリストパーティションを作成してテーブルをパーティション分割することをお勧めします。
is_deleted列。そうすると、削除された行と削除されていない行は物理的に異なるパーティションに配置されますが、あなたにとっては透過的です。
その結果、次のようなクエリを入力すると
SELECT * FROM table_name WHERE is_deleted = 1次に、Oracleは「パーティションプルーニング」を実行し、適切なパーティションのみを調べます。内部的にはパーティションは別のテーブルですが、ユーザーとしては透過的です。パーティション化されているかどうかに関係なく、テーブル全体を選択できます。しかし、オラクルはクエリを実行できます 必要なパーティションのみ 。たとえば、1000行あるとしましょう。is_deleted = 0および100000行is_deleted = 1で、テーブルをパーティション分割しますis_deleted。今、条件を含めると
WHERE ... AND IS_DELETED = 0その場合、Oracleは1000行のパーティションのみをスキャンします。テーブルがパーティション化されていない場合、101000行(両方のパーティション)をスキャンする必要があります。