[ruby on rails]PostgresSQL分区表、继承表、触发器在rails中的应用

一、表分区

1. 什么是表分区

PostgresSQL 分区是把逻辑上的一个大表分割成物理上的几块。就是一个主表,会有很多的子表继承主表,字段和主表一样。一般都是建立一个主表,里面是空,然后每个分区都去继承它。分区不仅能带来性能的提升,还能带来管理和维护上的方便。在 PG 里面无论何时,都应保证主表里面是空的。pg10以前没有内置的分区表功能,用继承表加触发器来做分区。pg10以后的版本,内置分区功能非常好用。

1. 分区的好处

  • 某些类型的查询性能可以得到极大的提升,特别是表中访问率较高的行位于一个单独分区或少数几个分区的情况下。如果在按时间分区的表中,大多数查询发生在时间最近的一个分区或几个分区中,而较早时间分区比较少查询,那么,在建分区表后各个分区表会有各自的索引,使用率较高的分区表的索引就可能完全缓存在内存中,这样效率就会高很多;
  • 更新的性能也可以得到提升,因为表的每块的索引要比在整个数据集上的索引要小。如果索引不能全部放在内存里,那么在索引上的读和写都会产生更多的磁盘访问。
  • 删除历史数据更快,如果是按时间分区的,在删除历史数据时,直接删除历史分区就可以了,如果没有分区,通过 DELETE 删除数据时会比较慢,还容易导致 VACUUM 超载;
  • 当查询或更新一个分区的大部分记录时,连续扫描那个分区而不是使用索引离散的访问整个表,可以获得巨大的性能提升;

2. 分区的使用限制

  • 没有在所有分区上自动创建匹配索引的选项。必须使用单独的命令向每个分区添加索引。

你可能感兴趣的:(ruby,on,rails,ruby,on,rails,数据库,后端)