Sql

ソフト削除を実装するための最良の方法は何ですか?



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行(両方のパーティション)をスキャンする必要があります。