【发布时间】:2017-03-24 14:33:27
【问题描述】:
希望有人可以帮助解决这个问题。
我们需要从 SQL 中的行集 XML 列返回一个数据字段。该例程有效,但不使用任何已创建的 XML 索引(值/路径/属性上的主要 + 次要索引,但没有选择性 XML 索引)。由于 XML 的数量,查询引擎的不断分解大大降低了查询速度。关于如何让 SQL Server (2012) 实际使用 XML 列上的 XML 索引的任何想法?
关闭或打开 XML 索引没有速度差异、数据读取或计划差异,因此它绝对没有使用它们。
示例查询(@Field 是必需的字段名称,@XmlData 是 XML)。
@XmlData.value(
'declare namespace rs="urn:schemas-microsoft-com:rowset";
declare namespace z="#RowsetSchema";
(/xml/rs:data/rs:insert/z:row[@fm_field=sql:variable("@Field")]/@fm_data)[1]','nvarchar(255)')
示例 XML sn-p...
<xml xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema">
<s:Schema id="RowsetSchema">
<s:ElementType name="row" content="eltOnly" rs:updatable="true">
<s:AttributeType name="fm_field" rs:number="1" rs:write="true">
<s:datatype dt:type="string" dt:maxLength="255" rs:precision="0" rs:fixedlength="true" rs:maybenull="false" />
</s:AttributeType>
<s:AttributeType name="fm_data" rs:number="2" rs:write="true">
<s:datatype dt:type="string" dt:maxLength="255" rs:precision="0" rs:fixedlength="true" rs:maybenull="false" />
</s:AttributeType>
<s:extends type="rs:rowbase" />
</s:ElementType>
</s:Schema>
<rs:data>
<rs:insert>
<z:row fm_field="ABSOLVELIA" fm_data="No" />
<z:row fm_field="ADJNO" fm_data="" />
<z:row fm_field="AIRPORTS" fm_data="No" />
【问题讨论】:
标签: sql-server xml performance indexing