WEB开发网
开发学院数据库DB2 DB2 9中15个pureXML性能最佳实践 阅读

DB2 9中15个pureXML性能最佳实践

 2010-02-18 15:01:05 来源:WEB开发网   
核心提示:注意,我们在视图定义中包括了一些关系列,DB2 9中15个pureXML性能最佳实践(7),这并没有产生任何物理上的冗余,因为它只是一个视图,应该尽可能在视图定义中包含其他的列,以便在那些列上表达过滤谓词,而不是物化的视图,暴露关系列有助于有效地查询这个视图

注意,我们在视图定义中包括了一些关系列。这并没有产生任何物理上的冗余,因为它只是一个视图,而不是物化的视图。暴露关系列有助于有效地查询这个视图。假设我们需要取一个对应于特定单位的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 列上表达过滤谓词。

上一页  2 3 4 5 6 7 8  下一页

Tags:DB pureXML 性能

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接