技术开发 频道

改进大型数据库的管理:放置分区表

【IT168 技术文档】
放置分区表

    该实验探讨放置分区表以及使用 describe 命令说明表内的范围和放置情况的方法:

1.您将为数据放置练习创建新的表空间。
2.你将创建不同格式的分区表。
3.您将使用 db2 命令和 SQL 查看结果。

基本环境设置

    使用 describe data partitions 命令以及 show detail 方法来显示表空间的分区放置。

清单 20. 创建表

db2 describe data partitions for table LINEITEM show detail



图 10. 表空间的分区放置

    注意:TableSpID 列给出了包含分区的表空间的 ID 号。在本例中,TableSpID 是 ‘3’。 

    使用 list tablespaces 命令标识与 TableSpId 相关联的表空间。 

    清单 21. 说明

db2 list tablespaces



图 11. 标识表空间 

    注意:相应值为 ‘2’ 的 TableSpID 是 USERSPACE1 或默认的表空间。 

    现在将创建五个表空间来说明不同的放置选项。使用如下命令: 

    清单 22. 说明

db2 create tablespace dms_d1 managed by database using (file 'c:\ts1' 10000);
db2 create tablespace dms_d2 managed by database using (file 'c:\ts2' 10000);
db2 create tablespace dms_d3 managed by database using (file 'c:\ts3' 10000);
db2 create tablespace dms_d4 managed by database using (file 'c:\ts4' 10000);
db2 create tablespace dms_i1 managed by database using (file 'c:\ts5' 10000); 

    创建该表空间的 SQL 位于 EX2-3.sql 文件中,可使用下面的命令运行该文件: 

    清单 23. 查询数据脚本

db2 –vtf EX2-3.sql 

    创建一个新的 LINEITEM 表,具有位于 dms_d1 和 dms_d2 表空间的生成分区集。首先,使用如下命令删除现有的 LINEITEM 分区表: 

    清单 24. 删除表

db2 drop TABLE LINEITEM 

    然后,使用下面的 DDL 创建 LINEITEM 表的新版本: 

    清单 25. 创建表 
CREATE TABLE LINEITEM (l_orderkey DECIMAL(10,0) NOT NULL, l_partkey INTEGER, l_suppkey INTEGER, l_linenumber INTEGER, l_quantity DECIMAL(12,2), l_extendedprice DECIMAL(12,2), l_discount DECIMAL(12,2), l_tax DECIMAL(12,2), l_returnflag CHAR(1), l_linestatus CHAR(1), l_shipdate DATE, l_commitdate DATE, l_receiptdate DATE, l_shipinstruct CHAR(25), l_shipmode CHAR(10), l_comment VARCHAR(44)) IN DMS_D1, DMS_D2 PARTITION BY RANGE(l_shipdate) (STARTING MINVALUE, STARTING '1/1/1992' ENDING '31/12/1998' EVERY 1 MONTH, ENDING MAXVALUE);


    创建该表的 SQL 位于 EX2-4.sql 文件中,可使用下面的命令运行该文件: 

    清单 26. 运行 EX2-4

db2 –vtf EX2-4.sql 

    使用下面的命令说明为 LINEITEM 表创建的分区范围: 

    清单 27. 说明

db2 describe data partitions for table LINEITEM show detail



图 12. 说明为 LINEITEM 表创建的分区范围



图 13. 分区 

    注意:TableSpID 列给出了包含分区的表空间的 ID 号。在本例中,TableSpID 为 4(对应于 DMS_D1)或 5(对应于 DMS_D2)。本例中将生成的分区依次分配给指定的表空间。

分区的显式放置 

    创建一个具有四个数据分区的新 LINEITEM 表,每一个数据分区被显式地放在表空间中。首先使用如下命令删除现有的 LINEITEM 表: 

    清单 28. 删除表

db2 drop TABLE LINEITEM 

    然后使用下面的 DDL 创建 LINEITEM 表的新版本: 

    清单 29. 创建表 

CREATE TABLE LINEITEM (l_orderkey DECIMAL(10,0) NOT NULL, l_partkey INTEGER, l_suppkey INTEGER, l_linenumber INTEGER, l_quantity DECIMAL(12,2), l_extendedprice DECIMAL(12,2), l_discount DECIMAL(12,2), l_tax DECIMAL(12,2), l_returnflag CHAR(1), l_linestatus CHAR(1), l_shipdate DATE, l_commitdate DATE, l_receiptdate DATE, l_shipinstruct CHAR(25), l_shipmode CHAR(10), l_comment VARCHAR(44)) PARTITION BY RANGE(l_shipdate) ( STARTING MINVALUE IN DMS_D1, STARTING '1/1/1992' ENDING '31/12/1992' IN DMS_D2, STARTING '1/1/1993' ENDING '31/12/1993' IN DMS_D3, ENDING MAXVALUE IN DMS_D4 );
    创建表的 SQL 位于 EX2-6.sql 文件中,可使用下面的命令运行该文件: 

    清单 30. 运行 EX2-6

db2 –vtf EX2-6.sql 

    使用下面的命令说明为 LINEITEM 表创建的分区范围: 

    清单 31. 说明

db2 describe data partitions for table LINEITEM show detail



图 14. 说明为 LINEITEM 表创建的分区范围 

    注意:在本例中,每一个分区被放置在一个不同的 TableSpID 中,这个 TableSpID 和创建表的 DDL 中指定的表空间是相对应的。 

    创建一个具有四个数据分区的 LINEITEM 表,每一个数据分区被显式地放在表空间并且索引被放在表空间 DMS_I1 中。
在这一步中,将引入命名分区的概念,而不是使用默认的生成名称。 

    首先,使用下面的命令删除现有的 LINEITEM 分区表: 

    清单 32. 删除表

db2 drop TABLE LINEITEM 


    然后,使用以下的 DDL 创建 LINEITEM 表的新版本: 

    清单 33. 创建表 

CREATE TABLE LINEITEM (l_orderkey DECIMAL(10,0) NOT NULL, l_partkey INTEGER, l_suppkey INTEGER, l_linenumber INTEGER, l_quantity DECIMAL(12,2), l_extendedprice DECIMAL(12,2), l_discount DECIMAL(12,2), l_tax DECIMAL(12,2), l_returnflag CHAR(1), l_linestatus CHAR(1), l_shipdate DATE, l_commitdate DATE, l_receiptdate DATE, l_shipinstruct CHAR(25), l_shipmode CHAR(10), l_comment VARCHAR(44)) INDEX IN DMS_I1 PARTITION BY RANGE(l_shipdate) ( PART JAN1992 STARTING '1/1/1992' ENDING '30/6/1992' IN DMS_D1, PART JULY1992 STARTING '1/7/1992' ENDING '31/12/1992' IN DMS_D2, PART JAN 1993 STARTING '1/1/1993' ENDING '30/6/1993' IN DMS_D3, PART JULY1993 STARTING '1/7/1993' ENDING '31/12/1993' IN DMS_D4);

    创建表的 SQL 位于 EX2-8.sql 文件中,可使用下面的命令运行该文件: 

    清单 34. 运行 EX2-8

db2 –vtf EX2-8.sql 

    在 LINEITEM 表中创建一个索引,并将它放置在表空间 DMS_I1 中。使用如下 SQL: 

    清单 35. 索引

db2 “create index I_LINEITEM on LINEITEM(L_SHIPDATE) in DMS_I1” 

    使用下面的 SQL 检验和该表相关联的索引的位置: 

    清单 36. 说明

db2 “select tabname, index_tbspace from syscat.tables where tabname = ‘LINEITEM’”



图 15. 检验索引的位置 


    注意:索引空间是 DMS_I1。如果没有为分区表指定表空间,那么默认情况下索引位于连接着的第一个表空间。
在 CREATE TABLE 中定义表空间是很好的实践。然而,无论您是否在创建表语句 ID 中指定索引表空间,这并不限制您将来放置索引的位置。您可以在 CREATE INDEX 语句本身显式地指定索引表空间。 

    同一分区表的不同索引可以放置在不同的表空间。
0
相关文章