由于客户要求,我需要实施以下方案:
每当用户想要删除表示文档的记录时,需要使用简单的BOOLEAN is_deleted
条件将该特定记录标记为已删除。
凭证是存储发票,订单或要约的其中一个表的通用名称。
一切都很简单,但我想知道是否有一种方法可以对记录进行索引以执行快速搜索,并以某种方式跳过/省略已删除的项目(或者根本不需要担心性能并使用简单的where子句{{ 1}})。
其他解决方案/建议也将受到赞赏。
答案 0 :(得分:1)
PostgreSQL支持部分索引。你可以这样做:
create index document_id_is_deleted_idx ON document(id) where is_deleted;
如果您需要对数据的某些部分使用唯一的子集,您甚至可以创建唯一索引。
当然,在索引中获取正确的列是一项练习,但它非常容易管理。
答案 1 :(得分:0)
您可能想要探索的另一个选项是将这些记录移动到另一个表,或者使用分区来分隔已删除和未删除的行(这些行大致相同)。
这样您就可以将所有感兴趣的记录保存在一个较小的表中,该表可以与已删除记录的索引不同。
如果您沿着分区路线走下去,那么您将拥有一份DOCUMENTS主表,其中包含DOCUMENTS_DELETED和DOCUMENTS_LIVE表。