带有XML索引的访问方法

多种数据访问方法使用XML索引。

开始特定程序编程接口信息。

当您创建一个包含XML列的表时, Db2 会在基础表上隐式创建一个文档ID索引 (DOCID索引),并在每个关联的XML表上创建一个节点ID索引 (NODEID索引)。 文档ID索引将基本表行与XML索引指向的行相关联。 XML表格中文档的数据以多条记录的形式存储。 节点ID索引将XML文档的记录链接起来。

当您明确地在XML列上创建索引时, XML索引包含复合键值,用于将XML值映射到DOCID和NODEID对。 XML索引为XML文档中的节点建立索引,这些节点与索引定义中的XPath表达式相匹配。 Db2 将谓词中的XPath表达式与XML索引中的XPath表达式进行比较,以确定包含匹配的键值的索引键条目。 Db2 使用已识别索引键条目的文档标识符(DOCID)和节点标识符(NODEID)对,高效定位对应的基础表行。

下列数据访问方法用于具有合格XML索引的谓词。

访问方法名称 PLAN_TABLE中ACCESSTYPE的值 用途
文档识别码列表访问 DX 检索与XML表行相对应的基表行。 Db2 搜索XML索引,检索所有符合条件的DOCID,并创建DOCID列表。 Db2 使用文档ID索引将文档ID列表转换为RID列表,用于获取基本表行。 更改开始如果满足特定条件,即使存在多个合格索引,也可以将此访问方法用于单个XML索引。更改结束
文档编号和编号 DI 当两个谓词由AND连接时,检索包含XPath表达式的行。 Db2 为每个谓词创建一个文档标识符(DOCID)列表,并形成它们的交集。
文档编号:ORing DU 当两个谓词由OR连接时,检索包含XPath表达式的行。 Db2 为每个谓词创建一个文档标识符(DOCID)列表,并将它们合并。
匹配的谓词并不总是与XML索引中的XPath表达式完全匹配。 以下信息描述了匹配的一些最常见类型以及匹配的限制。
完全匹配
完全匹配,即两个XPath表达式完全相同。 此方法仅用于SQL数据类型为VARCHAR的XML索引。 例如: XMLEXISTS: /a/b/c 中的XPath表达式,以及XML索引中的XPath表达式:/a/b/c。
完全匹配,但XMLEXISTS中XPath表达式的结尾部分位于谓词中
仅当XPath谓词为一般比较运算符=、<、<=、>或>=时使用。谓词中操作数的数据类型必须与索引数据类型匹配。 例如, XMLEXISTS: /a[b/@c > 123] 中的XPath表达式和XML索引中的XPath表达式: /a/b/@c.
部分精确匹配剩余步骤
用于评估XPath表达式,该表达式比前两种方法步骤多。 XMLEXISTS的XPath表达式中的这些额外步骤被称为“剩余步骤”。 例如: XMLEXISTS: /a/b[c > “xyz”]//d[e=8] 中的XPath表达式,以及XML索引中的XPath表达式:/a/b/c。
索引过滤的部分匹配
上述方法在XMLEXISTS的XPath表达式中与索引的XPath表达式“很好地”匹配。 这种方法可以处理XMLEXISTS中的XPath表达式与索引的XPath表达式不匹配的情况。 例如: XMLEXISTS: /a[b/c = 5]/d 中的XPath表达式,以及XML索引中的XPath表达式://c。
在文档ID列表中部分精确匹配AND和OR
XPath表达式可以分解为多个XPath段,这些段通过与或运算组合在一起,产生最终结果的超集。 上述方法适用于每个分解的XPath段,以确定是否可使用XML索引来评估XPath段。 例如: XMLEXISTS: /a/b[c = “xyz” and d > “abc”] 中的XPath表达式,以及XML索引中的XPath表达式:/a/b/c和/a/b/d。
部分匹配,用于过滤,与DOCID列表上的AND和OR结合使用
部分匹配过滤可与部分精确匹配结合,在文档ID列表中用AND和OR进行组合。 例如: XMLEXISTS: /a/b[@c = 5 or d > “a” ]/e 中的 XPath 表达式,XML 索引中的 XPath 表达式: //@c 和 /a/b/d。

结束特定程序编程接口信息。