在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
(完整包装)是默认值