我知道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都有一个不同的表,其中存储了每个表的分区值。
谢谢,
答案 0 :(得分:3)
表分区存储在表空间中。 对于常规表(如果未使用表分区),表数据存储在单个表空间中(不考虑LOB)。 对于分区表,可以将多个表空间用于其分区。 这是通过""来实现的。 CREATE TABLE语句的子句。
CREATE TABLE parttab
...
in TBSP1, TBSP2, TBSP3
在此示例中,第一个分区将存储在TBSP1中,第二个分区将存储在TBSP2中,第三个分区将存储在TBSP3中,第四个分区将存储在TBSP1中,依此类推。
表分区在DB2中命名 - 默认为PART1 ..PARTn - 所有这些详细信息都可以在系统目录视图SYSCAT.DATAPARTITIONS中查找,包括指定的分区范围。
可以在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排序