DB2分区

时间:2014-06-01 12:06:37

标签: db2 database-partitioning

我知道DB2中的分区是如何工作的,但我不知道该分区值的确切存储位置。编写创建分区查询后,例如:

CREATE TABLE orders(id INT, shipdate DATE, …)
  PARTITION BY RANGE(shipdate)
    (
    STARTING '1/1/2006' ENDING '12/31/2006' 
     EVERY 3 MONTHS
    )  

运行上述查询后,我们知道每3个月按顺序创建分区,但是当我们运行select查询时,查询引擎会引用此分区。我很想知道它实际存储在哪里,无论是在同一个表中还是DB2都有一个不同的表,其中存储了每个表的分区值。

谢谢,

3 个答案:

答案 0 :(得分:3)

DB2中的

表分区存储在表空间中。 对于常规表(如果未使用表分区),表数据存储在单个表空间中(不考虑LOB)。 对于分区表,可以将多个表空间用于其分区。 这是通过""来实现的。 CREATE TABLE语句的子句。

CREATE TABLE parttab
...
in TBSP1, TBSP2, TBSP3

在此示例中,第一个分区将存储在TBSP1中,第二个分区将存储在TBSP2中,第三个分区将存储在TBSP3中,第四个分区将存储在TBSP1中,依此类推。

表分区在DB2中命名 - 默认为PART1 ..PARTn - 所有这些详细信息都可以在系统目录视图SYSCAT.DATAPARTITIONS中查找,包括指定的分区范围。

另见http://www-01.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/com.ibm.db2.luw.sql.ref.doc/doc/r0021353.html?cp=SSEPGG_10.5.0%2F2-12-8-27&lang=en

可以在syscat.datapartitionexpression中查找用作分区键的列。

还有一个很长的语法来创建分区表,其中可以明确地指定分区名称以及分区将被存储的表空间。

对于应用程序,分区表看起来像一个普通表。 分区可以从分区表中分离。在这种情况下,分区是"断开"从分区表中转换为表而不移动数据(反之亦然)。

最好的问候 迈克尔

答案 1 :(得分:1)

DB2将为每个分区创建单独的物理位置。因此每个分区都有自己的表空间。当您在此分区表上进行SELECT时,您的SQL可能直接转到单个分区,或者它可能跨越多个分区,具体取决于您的SQL。此外,这可能允许您的SQL并行运行,即可以同时访问许多TS以加速SELECT。

答案 2 :(得分:1)

经过一番研究后,我终于明白了,并想与其他人分享这些信息,我希望它对其他人有用。

如何查看此键值? =>对于LUW(Linux / Unix / Windows),您可以在“表对象编辑器”或“对象查看器脚本”选项卡中查看键。对于z / OS,有一个名为“限制键”的“对象查看器”选项卡。我已经打开了问题TDB-885来为LUW表创建一个Object Viewer选项卡。

检查此值的简单查询:

SELECT * FROM SYSCAT.DATAPARTITIONS

TABSCHEMA =? AND TABNAME =?

按SEQNO排序

参考:http://www-01.ibm.com/support/knowledgecenter/SSEPGG_9.5.0/com.ibm.db2.luw.sql.ref.doc/doc/r0021353.html?lang=en