分布式 DBA: 创建和使用分区表
2010-09-16 00:00:00 来源:WEB开发网CREATE TABLE inventory
(item_no INT,
desc VARCHAR(20))
PARTITION BY (item_no NULLS FIRST)
(PARTITION PRODUCE STARTING MINVALUE ENDING 100 IN tbsp0,
PARTITION DAIRY STARTING 101 ENDING 200 IN tbsp1,
PARTITION BAKERY STARTING 201 ENDING 300 IN tbsp2,
PARTITION MEAT STARTING 301 ENDING 400 IN tbsp3)
选择表分区键
选择有效的表分区键列对于发挥表分区的优势非常重要。最有效的表分区键列是有利于分区消除的列。例如,如果通常按日期查询表中的记录,那么应该用日期或时间列进行表分区。
同样,如果希望随着时间的推移把表数据的一部分删除或存档,应该根据期望的记录存档方式进行表分区。例如,如果希望把三年前的所有数据都存档,应该按周、月或季度进行表分区,这样就可以分别在每周、每月或每季度末删除一个老分区。
对于这个示例,ITEM_NO 值在 1 到 100 之间的行将存储在名为 PRODUCE 的分区中(这个分区的数据写到表空间 TBSP0 中),ITEM_NO 值在 101 到 200 之间的行将存储在名为 DAIRY 的分区中(这个分区的数据写到表空间 TBSP1 中),依次类推;ITEM_NO 值为 NULL 的行将存储在 PRODUCE 分区中。
一定要注意,当指定 NULLS FIRST 选项时,第一个分区必须从 MINVALUE 开始。(同样,如果使用 NULLS LAST 选项,最后一个分区必须结束于 MAXVALUE。)否则,在插入分区键列为 NULL 值的记录时,会产生 “data out of bounds” 错误。另外,每个分区的数据、索引和长列数据可以放在不同的表空间中。如果不为索引或长列指定表空间,分区索引和长列数据会存储在与数据相同的表空间中。
在默认情况下,范围包含边界本身。要想防止在某一分区中存储特定的记录,可以用 EXCLUSIVE 选项创建范围。例如:
CREATE TABLE sales
(sales_date DATE,
sales_amt NUMERIC(5,2))
IN tbsp0, tbsp1, tbsp2, tbsp3
PARTITION BY RANGE (sales_date)
(STARTING '1/1/2010' ENDING '3/31/2010' EXCLUSIVE,
STARTING '3/31/2010' ENDING '6/30/2010' EXCLUSIVE,
STARTING '6/30/2010' ENDING '9/30/2010' EXCLUSIVE,
STARTING '9/30/2010' ENDING '12/31/2010')
在这个示例中,销售日期为 3/31/2010 的记录不会存储在表空间 TBSP0 中,而是存储在表空间 TBSP1 中。
当在分区表中插入行时,会根据键值及其所处的范围自动地把它放到适当的数据分区中。如果键值不处于表的任何范围内,插入操作就会失败并产生一个错误。
轻松地移入和移出数据
使用分区表的另一个优点是,可以轻松地在表中添加新数据(作为新的数据分区),同时可以轻松地删除并存档老数据。在下一篇专栏文章中,我将讲解添加(移入)和删除(移出)数据分区的过程。还要讨论 DB2 9.7 中的改进如何大大加快移入和移出数据分区的速度,减少这些操作产生的干扰。
更多精彩
赞助商链接