由于客户要求,我需要实现以下场景:
每当用户想要删除代表文档的记录时,需要使用简单的 BOOLEANis_deleted
条件将该特定记录标记为已删除。
文档是存储发票、订单或报价的表之一的通用名称。
一切都非常简单,但我想知道是否有一种方法可以索引记录以执行快速搜索并以某种方式跳过/省略已删除的项目(或者根本不需要担心性能并使用简单的 where 子句is_deleted=False
)。
其他解决方案/建议也将不胜感激。
由于客户要求,我需要实现以下场景:
每当用户想要删除代表文档的记录时,需要使用简单的 BOOLEANis_deleted
条件将该特定记录标记为已删除。
文档是存储发票、订单或报价的表之一的通用名称。
一切都非常简单,但我想知道是否有一种方法可以索引记录以执行快速搜索并以某种方式跳过/省略已删除的项目(或者根本不需要担心性能并使用简单的 where 子句is_deleted=False
)。
其他解决方案/建议也将不胜感激。
PostgreSQL 支持部分索引。您可以执行以下操作:
create index document_id_is_deleted_idx ON document(id) where is_deleted;
如果您需要部分数据的唯一子集,您甚至可以创建唯一索引。
当然,在索引中获取正确的列是一项练习,但它非常易于管理。
您可能想探索的另一个选项是将这些记录移动到另一个表,或使用分区来分隔已删除和未删除的行(这大致相当于同一件事)。
这将使您可以将所有感兴趣的记录保存在一个较小的表中,该表的索引与已删除记录的索引不同。
如果您沿着分区路线走,您将拥有一个 DOCUMENTS 主表,其中 DOCUMENTS_DELETED 和 DOCUMENTS_LIVE 表继承自它。