DB2 9中15个pureXML性能最佳实践
2010-02-18 15:01:05 来源:WEB开发网注意,我们在视图定义中包括了一些关系列。这并没有产生任何物理上的冗余,因为它只是一个视图,而不是物化的视图。暴露关系列有助于有效地查询这个视图。假设我们需要取一个对应于特定单位的XML 文档。下面三个查询都可以实现这一点,但是第三个查询要好于前两个查询。
在前两个查询中,过滤谓词是在构造的XML 上表达的。但是,XML 谓词不能应用于底层关系列或它的索引。因此,这些查询要求视图为所有单位构造 XML,然后选出对应于单位 “WWPR”的XML。这并非最佳方法。
以下查询可能取得次优性能:
清单 10. 次优的查询
select unitdoc
from UnitView
where xmlexists('$i/Unit[ID = "WWPR"]' passing unitdoc as "i");
for $u in db2-fn:xmlcolumn('UNITVIEW.UNITDOC')/UNIT
where $u/ID = "WWPR"
return $u;
第三种方法使用一个关系谓词来确保只为“WWPR” 构造 XML 文档,从而减少了运行时间,对于大型的数据集,这种方法带来的性能好处尤其显著。这个查询可以取得很好的性能:
清单 11.性能较好的查询
select unitdoc
from UnitView
where UnitID = "WWPR";
总而言之,将关系列包括在SQL/XML 发布视图中,在查询视图时,在那些关系列上表达谓词,而不是在构造的XML 上表达谓词。
提示13:如何使用XMLTABLE 视图以关系格式暴露 XML数据
创建一个视图以 XML 格式暴露关系数据,这样做很有用。同样,您可能也想使用一个视图将XML数据暴露为关系格式。提示12中的提醒也适用于这里的情况,只不过顺序要倒过来。让我们来看看下面的例子,其中使用了 SQL/XML函数 XMLTABLE 以标量格式返回 XML 文档中的值:
清单 12. 以标量格式返回的XML 文档中的值
create table customer(info XML);
create view myview(CustomerID, Name, Zip, Info) as
SELECT T.*, info
FROM customer, XMLTABLE ('$c/customerinfo' passing info as "c"
COLUMNs
"CID" INTEGER PATH './@Cid',
"Name" VARCHAR(30) PATH './name',
"Zip" CHAR(12) PATH './addr/pcode' ) as T;
注意,我们将XML 列 info 包括在视图定义中,以便帮助有效地查询这个视图。假设您想基于给定的ZIP 号码检索客户 ID和姓名的一个标量列表。下面两个查询都可以实现这一点,但是第二个查询比第一个查询的性能要好。在第一个查询中,过滤谓词是在由 XMLTABLE函数生成的CHAR 列 “Zip” 上表达的。但是,关系谓词不能应用于底层的XML 列或它的索引。因此,这个查询要求视图为所有 客户生成行,然后根据邮政编码 “95141” 选择符合条件的行。这不是最佳方法。第二个查询使用一个 XML 谓词来确保只生成对应于“95141”的行,从而减少了运行时间,对于大型的数据集,这种方法带来的性能好处尤其显著。
清单 13. 包含 XML 谓词的查询
-- may perform suboptimal:
select CustomerID, Name
from myview
where Zip = "95141";
-- will perform well:
select CustomerID, Name
from myView
where xmlexists('$i/customerinfo[addr/pcode = "95141"]' passing info as "i");
如果定义视图所用的基表不仅包含一个 XML 列,还包含有索引的关系列,那么应该将那些关系列包含在视图定义中。如果对视图的查询包含关系列上的具有高度限制性的谓词,那么 DB2 使用关系索引来过滤符合条件的行,得到较小数量的行,然后在返回最终结果集之前,对这个中间结果应用XMLTABLE和其他谓词。
总而言之,在使用XMLTABLE 视图将XML数据暴露为关系格式时要加以小心。应该尽可能在视图定义中包含其他的列,以便在那些列上表达过滤谓词,而不是在XMLTABLE 列上表达过滤谓词。
- ››db2 对float类型取char后显示科学计数法
- ››DB2中出现SQL1032N错误现象时的解决办法
- ››DB2 锁升级示例
- ››db2诊断系列之---定位锁等待问题
- ››db2 命令选项解释
- ››性能自检Win7快速提高系统性能3技巧
- ››DB2 最佳实践: 使用 DB2 pureXML 管理 XML 数据的...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 基础: 表空间和缓冲池
- ››DB2 XML 编程,第 1 部分: 理解 XML 数据模型
更多精彩
赞助商链接