好的,所以实际上每个基于数据库的应用程序都必须处理"非活动"记录.要么是软删除,要么是将某些内容标记为"被忽略".我很好奇关于"活跃"专栏(或状态专栏)是否有激进的替代思想.

例如,如果我有一份名单

CREATE TABLE people (
  id       INTEGER PRIMARY KEY,
  name     VARCHAR(100),
  active   BOOLEAN,
  ...
);

这意味着要获得活跃人员的列表,你需要使用

SELECT * FROM people WHERE active=True;

是否有人建议将非活动记录转移到一个单独的表中,并在适当的位置创建一个联合来加入这两个表?

好奇心惊人...

EDIT:.我要说清楚,我是从纯粹主义的Angular 来看这件事的.我可以看出,对于大量数据,数据归档可能是必要的,但这不是我的本意.如果你做一个"从人中 Select ",我觉得这些条目在某种意义上是"活跃的"

谢谢

推荐答案

您可以根据活动标志对表进行分区,以便活动记录位于一个分区中,而非活动记录位于另一个分区中.然后 for each 表创建一个活动视图,该表上自动包含活动过滤器.数据库查询引擎会自动将查询限制到包含活动记录的分区,这比在该标志上使用索引要快得多.

下面是一个如何在Oracle中创建分区表的示例.Oracle没有布尔列类型,所以我修改了您的表 struct 以用于Oracle.

CREATE TABLE people
(
   id       NUMBER(10),
   name     VARCHAR2(100),
   active   NUMBER(1)
)
PARTITION BY LIST(active)
(
   PARTITION active_records VALUES (0)
   PARTITION inactive_records VALUES (1)
);

如果愿意,可以将每个分区放在不同的表空间中.还可以对索引进行分区.

顺便说一句,这似乎是this个问题的重复,作为一个新手,我需要问一下,处理意外复制品的程序是什么?

Edit:按照注释中的要求,提供了在Oracle中创建分区表的示例

Postgresql相关问答推荐

优化PostgreSQL查询以将用户插入数据库

PostgreSQL中btree_gist索引涉及integer和tstzrange属性查询计划的问题

Postgres 13.8 -如何在对数据执行窗口操作时返回所有行

在特定值的组聚合中添加标签列作为结果

postgres 如何计算多列哈希?

将 postgres 从属提升为主 node

Rails:安装 pg gem 时出错

如何在容器内创建 postgres 扩展?

LAG 函数和 GROUP BY

如果 PostgreSQL 数据库中存在,则删除表

在远程机器上Restore dump

Psycopg2 使用占位符插入表格

如何判断每个组中是否存在值

我不明白 postgresql 的 nextval() 是如何工作的,有人可以解释一下吗?

Postgres NOT IN (null) 没有结果

从 PostgreSQL 序列中 Select 多个 id

在 PostgreSQL 中使用 Cursors进行分页

SqlAlchemy:多列的不同计数

在 pg_restore 期间排除表

如何在 PostgreSQL 中生成一系列重复数字?