Ole*_*nov 4 postgresql partitioning
是)我有的:
表的简化模式,将是非常大的:
id| integer | not null default nextval('table_id_seq'::regclass)
url_id | integer | not null
domain_id | integer | not null
position | integer | not null
Run Code Online (Sandbox Code Playgroud)
上面的架构的问题是我没有关于如何对其进行分区的确切答案.将使用所有期间的数据(没有查询将具有日期过滤器).
我想过在"domain_id"字段上进行分区,但问题是很难预测每个分区会有多少行.
我的主要问题是:
如果我不使用分区修剪而且我不打算删除旧数据,那么分区数据是否有意义?
什么是利弊?
如果我不进行分区,如何降低我的导入速度?
另一个与规范化有关的问题:
url应该导出到另一个表吗?
正常化的优点
非规范化的优点
任何人都可以给我任何建议吗?谢谢!
kgr*_*ttn 11
如果您要在大多数查询中具有选择条件,允许计划程序在大多数时间内跳过对大多数分区的访问,或者您希望定期清除分配给分区的所有行,则分区最有用,或者都.(删除表是删除大量行的一种非常快捷的方法!)我听说人们达到了一个阈值,在这个阈值中,分区有助于保持索引更浅,从而提高性能; 但实际上回到第一点,因为你有效地将索引树的第一级移动到另一个地方 - 它仍然必须发生.
从表面上看,听起来不像分区会有所帮助.
另一方面,标准化可能会比预期更好地提高性能; 通过将所有这些行保持更窄,您可以在每个页面中获得更多行,从而减少整体磁盘访问.我会做适当的第3次正常形式规范化,并且仅基于证据表明它会有所帮助.如果你看到一个性能问题,而你仍然有数据的第二个副本的磁盘空间,尝试创建一个非规范化的表,看到性能相比如何规范版本.