接上......
与管理只包含关系列的范围分区表相比,管理包含一个或多个 XML 列的范围分区表的差异并不大。尤其是,对于范围分区表,仍然可以使用以前支持的创建和修改表的 SQL 语句。另外,分区键仍然必须基于关系数据。
清单 3 创建一个包含关系和 XML 数据的范围分区表,滚出(分离)包含老数据的分区,滚入(附加)包含最近数据的分区。
清单 3. 结合使用范围分区和 DB2 pureXML
-- Create a range-partitioned table
CREATE TABLE salespart (
orderid INT,
orderdate DATE,
ordermonth INT NOT NULL GENERATED ALWAYS AS (month(orderdate)),
orderyear INT NOT NULL GENERATED ALWAYS AS (year(orderdate)),
customerid INT,
salesrepid INT,
details XML)
PARTITION BY RANGE (orderyear, ordermonth)
(PART q109 STARTING(2009, 1) ENDING (2009, 3) INCLUSIVE,
PART q209 ENDING (2009, 6) INCLUSIVE,
PART q309 ENDING (2009, 9) INCLUSIVE,
PART q409 ENDING (2009, 12) INCLUSIVE);
-- Insert or load data for 1Q – 4Q 2009 sales into the table
. . .
-- Create another table to contain new sales data to be attached
CREATE TABLE currentsales (
orderid INT,
orderdate DATE,
ordermonth INT NOT NULL GENERATED ALWAYS AS (month(orderdate)),
orderyear INT NOT NULL GENERATED ALWAYS AS (year(orderdate)),
customerid INT,
salesrepid INT,
details XML) ;
-- Insert or load new sales data for 1Q 2010 into the "currentsales" table
. . .
-- Attach a new partition for the 1Q 2010 sales data.
-- Perform an integrity check for index maintenance, range checking, etc.
ALTER TABLE salespart ATTACH PARTITION q110
STARTING (2010, 1) ENDING (2010, 3) INCLUSIVE
FROM TABLE currentsales ;
SET INTEGRITY FOR salespart IMMEDIATE CHECKED;
-- Detach the partition containing old sales data from 1Q 2009
ALTER TABLE salespart DETACH PARTITION q109 INTO OLDSALES;
现在,可以使用 Net Search Extender (NSE) 对范围分区表进行全文搜索。
使用多维聚簇提高查询性能
对包含 XML 数据的表进行多维聚簇是另一个新的数据库设计选项。在以前的版本中,这个功能只能应用于不包含 XML 列的表。多维聚簇对于分析应用程序尤其有用,分析应用程序通常会对多个列中的数据执行查询。
例如,分析应用程序可能需要按产品、地区和日期(三个维)获取一个大型事实表中的销售信息。为了支持这样的查询,管理员可以通过使用多维聚簇让 DB2 按这些维组织 SALES 表中的行。与同一产品在同一地区同一时间段内的销售相关的行集中存储在一个或多个数据块中,所以这种设计有助于减少 I/O 和改进多维查询的运行时性能。另外,多维聚簇还可以改进数据重组、插入和删除的性能。
在 DB2 9.7 中,包含 XML 列的表可以应用多维聚簇,但是聚簇维必须由关系列定义。与以前的版本一样,管理员使用 CREATE TABLE 语句的 ORGANIZE BY DIMENSION (…) 子句指定多维聚簇。清单 4 创建一个按产品、地区和日期对销售数据进行多维聚簇的表。
清单 4. 创建使用多维聚簇的包含关系和 XML 数据的表
CREATE TABLE salesMDC (
id INT,
product VARCHAR(25),
region VARCHAR(25),
time DATE,
details XML)
ORGANIZE BY (product, region, time)
使用 XML 数据和索引压缩提高存储效率和性能
压缩 XML 数据和 XML 索引可以提高存储效率和受 I/O 限制的查询的运行时性能。DB2 9.7 在这两方面提供了新选项。
可以以两种方式压缩 XML 数据:
占用的存储空间少于 32KB 的小型 XML 文档可以与关系数据一起内联存储 在同一行中,可以对整行进行压缩。这种内联功能是在 DB2 9.5 中引入的,现在仍然是有用的选项。
更大的 XML 文档存储在与关系数据分离的数据区域中,它们也可以压缩。在默认情况下,DB2 把 XML 数据放在一个称为 XML Data Area (XDA) 的单独位置,可以处理最大 2GB 的文档。DB2 的新版本允许压缩 XDA 中存储的 XML 数据。
在 DB2 9.7 中,只需通过 CREATE TABLE 语句的 COMPRESS YES 子句启用 XML 数据的压缩功能,这会同时压缩表中的关系和 XML 列。为了取得最好的压缩效果,DB2 使用两个单独的压缩词典,一个用于关系列,另一个用于表的 XML Data Area。这两个词典是在表中填充了几 MB 数据之后自动生成的。还可以为现有的表启用压缩,然后可以重组它以便压缩数据。
IBM 所做的早期测试表明,压缩 XML Data Area 中存储的 XML 数据常常可以节省 60%-80% 的磁盘空间,见图 6。
图 6. 压缩 XDA 中存储的 XML 数据可以节省 60%-80% 的磁盘空间
图 6 是 IBM 对客户提供的或公共领域中的六个数据集进行测试的结果。这些数据集包含从 2KB 到 100MB 的各种大小的文档。
接下......