第15章 数据分区

随着数据库的增长,通常总有那么一两个表会变得一发不可收拾。而如果表本身的容量远远超过了物理内存的大小,甚至索性连索引也不能改善性能的情况下,查询的执行时间将会大大延长。在这种情况下,对付这种类型的大表的一种方法就是将其进行分区管理,即将该表拆分为一系列较小的、与之相关联的表来进行替代。此时的应用程序不需修改,只需要不断地去查询同一个表。不过这个时候查询只需要去使用某个子集的数据返回查询结果,优化在这种情况下就会产生了,它将会取代整个表的扫描。

首先先回到在第10章中提到的Dell Store 2样例数据库的例子中,考虑如下结构的orders表。

..\0\13_页面_1.tif

..\0\13_页面_2.tif

试想一下在经过了多年的经营之后,在诸多订单的洗礼之下,该表上相关的查询会变得愈加笨拙。确定表分区阈值通常的经验法则是,当单个表的大小超过了服务器内存总量或者达到100万行数据的时候就要考虑对该表进行分区。

在这个例子当中,有两种可能的途径将数据划分成一些较小的块。首先,可以基于orderid字段对表进行分区。这可能是在实际的部署当中需要去做的事情,因为如果orders表变得很大的时候,orderlines表会变得更大。这两个表都可以通过orderid字段来进行有效的分区。 ...

Get PostgreSQL 9.0性能调校 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.