在哪些情况下应该使用继承表?我试着非常简单地使用它们,但在OOP世界中,继承似乎不像.

我以为是这样的:

users包含所有用户级别所需的所有字段.moderatorsadminsbloggers等表格,但字段是从父级判断的.例如,users有邮箱字段,继承的bloggers现在也有,但它不是usersbloggers同时唯一的.与我在两个表中添加邮箱字段相同.

我能想到的唯一用法是通常使用的字段,比如row_is_deletedcreated_atmodified_at.这是继承表的唯一用法吗?

推荐答案

在postgres中使用表继承有一些主要原因.

比如说,我们有一些统计所需的表格,每个月都会创建和填写这些表格:

statistics
    - statistics_2010_04 (inherits statistics)
    - statistics_2010_05 (inherits statistics)

在这个示例中,每个表中有2.000.000行.每个表都有一个判断约束,以确保只存储匹配月份的数据.

那么,是什么让继承成为一个很酷的特性呢?为什么拆分数据很酷呢?

  • 性能:在 Select 数据时,我们从统计数据中 Select *,其中日期在x和Y之间,Postgres只使用有意义的表格.例如,从"2010-04-01"和"2010-04-15"之间的日期仅扫描表格统计信息的统计信息中 Select *选项,所有其他表格都不会被触碰-快速!
  • 索引大小:我们没有在列日期有大索引的大表.我们每个月都有小表,索引小,读取速度更快.
  • 维护:我们可以在每个月的表上运行vacuum full、reindex和cluster,而无需锁定所有其他数据

要正确使用表继承来提高性能,请参阅postgresql手册.

我大量使用表继承,尤其是在存储按月分组的日志(log)数据时.提示:如果存储的数据永远不会更改(日志(log)数据),请使用(fillfactor=100)创建或使用create INDEX ON()创建索引;这意味着索引中不会保留更新空间,因为磁盘上的索引较小.

更新:

表中的fillfactor是10到fillfactor之间的百分比.fillfactor(完整包装)是默认值

Postgresql相关问答推荐

Postgs密码重置问题

PostgreSQL按描述请求

Keycloak和PostgreSQL

为MCV扩展统计设置统计目标

我想优化查询SQL

在连接字符串并将其附加到 PostgreSQL 中的 where 子句时出现语法错误.怎么修?

如何在 postgres 中查询键设置为空值的 jsonb 字段

连接到 PostgreSQL 时没有属性执行错误

PostgreSQL错误致命:角色 username不存在

PostgreSQL ,从 2 个表中 Select ,但仅从表 2 中 Select 最新的元素

如何查询存储在数组中的 Rails ActiveRecord 数据

psql:致命:connection requires a valid client certificate

PostgreSQL:将时间戳转换为时间 - 或仅从时间戳列中检索时间

Postgres 默认按 id 排序 - worldship

是否可以在 CSV 格式的 Postgres COPY 命令中关闭报价处理?

可以为空的列在 PostgreSQL 中是否会占用额外的空间?

PostgreSQL 字符串(255) 限制 - Rails、Ruby 和 Heroku

使用 Hibernate 注释映射 PostgreSQL 串行类型

查询 JSON 列中的数组元素

Postgresql滚动删除旧行?