【发布时间】:2013-09-20 11:42:56
【问题描述】:
由于客户要求,我需要实现以下场景:
每当用户想要删除代表文档的记录时,需要使用简单的 BOOLEAN is_deleted 条件将该特定记录标记为已删除。
Document 是存储发票、订单或报价的表格之一的通用名称。
一切都非常简单,但我想知道是否有一种方法可以索引记录以执行快速搜索并以某种方式跳过/省略已删除的项目(或者根本不需要担心性能并使用简单的 where 子句@987654323 @)。
其他解决方案/建议也将不胜感激。
【问题讨论】:
-
如果确实会导致性能问题,您可以使用省略/包含“已删除”记录的部分索引。否则 - 让 postgres 过滤掉它们。
-
Postgresql 9.3 引入了Materialized View,这可能很有用,但是对于布尔字段,我认为对该字段的过滤不会对性能造成很大影响。
-
部分索引除了让一些查询更快之外还有另一个好处,它们也更小,占用的缓存更少,维护它们产生的 I/O 开销更少(需要维护的条目更少)。例如。
CREATE INDEX docs_not_deleted_pidx ON docs (some_id) WHERE is_deleted IS FALSE
标签: sql postgresql search indexing