分区的概念是把大型表逻辑分解为小块的更好的性能数据库。

内置的PostgreSQL分区技术的方法

  • 范围分区
  • 表分区
  • 散列分区

何时使用分区

  • 批量数据加载和删除操作可以执行使用附加的分区特征和有效分离。
  • 确切的点表将受益于分区取决于应用程序。然而,经验法则是,表的大小应该超过数据库服务器的物理内存。
  • 数据增长,可以创建子分区,这提高了性能,也可以删除旧的分区通过使他们独立的或完全放弃他们。

分区的好处

  • 可以提高查询性能DDL和DML操作在某些情况下,特别是当最严重的被访问的行表的单个分区或少量的分区如下解释。
  • 当查询或更新访问一个大比例的一个分区,可以提高性能通过使用顺序扫描的分区,而不是使用一个索引,这将要求随机访问读取分散在整个表。
  • 将分区表或删除分区表可以通过使用DROP table和截断表,分别通过删除操作减少负载。

范围分区

数据库分区是基于一个特定范围的列与数据日期和数值。

在这里,作为一个例子,我创建了一个表范围分区和分区表为每个季度日期列。

范围分区表中所示的结构。

插入一些随机的数据条目,一年365天。

范围分区数据被视为低于分布在其分区。

DDL操作的性能

这里,我创建了一个表没有一个分区和插入相同的数据,类似于分区表。

查询计划被认为更适合当执行DDL操作数据与单个分区或更少的分区。

在这里,我们可以看到一个更好的查询计划时数据都是从比数据获取的非分区表的分区表。

表分区

数据库分区基于键值(s)或离散值和分区也可以用列的表达式(表达式)列表(范围),这是解释如下:

例如,我创建了一个表分区列表和一些list-partitioned表,并插入一些随机数据与1000行。

列表分区的表定义如下:

分区数据分布在其分区如下所示:

使用表达式列表分区

例如,我创建了一个表列表分区使用的表达式列。

列表分区的表定义如下:

在这里,我一些随机插入100行。

与表达分布在它的分区是分区数据列表所示:

DML操作的性能

这里有一个例子所示的表,没有创建分区和插入相同的数据类似的分区表。

下面我创建了一个表没有分区并与1000行显示插入一些随机数据查询性能。

更新查询性能

删除查询性能

上面的示例显示删除和更新操作的性能与数据获取从单个分区表有更好的查询计划比没有分区。

散列分区

散列分区表被定义为表分区通过指定模量和每个分区的剩余部分。

  • 每个分区将持有的散列值的行指定的分区键除以模量将产生指定的剩余部分。
  • 散列分区时最好使用每个分区是在不同的表空间驻留在单独的物理磁盘,所以IO同样除以更多的设备。

例如,我创建了一个表与散列分区和分区表5模量。

下面的表结构看起来像一个有五个创建分区:

在这里,我与100000行插入一些随机数据。

我们看到下面的散列分区数据分区表。

散列分区的好处

  • 的主要好处是确保数据均匀分布在一个预先确定的数量的分区。
  • 使用散列键有效且高效地在范围不适用的情况下,员工编号,产品编号,等。

如果是范围或列表的数据吗?

为此,我们使用默认分区范围和分区表列表。

范围和列表分区,数据可以存储暂时超出范围,通过创建一个默认分区之后创建一个适当的分区。

哈希分区的表可能没有一个默认的分区,作为散列分区创建一个默认的分区没有任何意义,不需要。

我们看到当我试着插入数据的分区不存在,在这种情况下默认分区如何帮助。

所以我们插入的数据发送到默认的分区,分区可以创建后基于默认表中的数据和可用分区。

结论

这里我们讨论了默认分区技术在PostgreSQL使用单一的列,我们还可以创建多列分区。PostgreSQL分区管理器(pg_partman)也可以用于创建和管理有效的分区。进一步的细节将会在即将到来的博客解释道。

另外,请查收以下相关博客供参考:

PostgreSQL分片:概述和MongoDB的比较

执行ETL在PostgreSQL使用继承

雷竞技下载官网Percona分布PostgreSQL提供最好的和最关键的企业组件从开源社区在一个分布,设计和测试一起工作。

raybet52

订阅
通知的
客人

0评论
内联反馈
查看所有评论