我有一个XML文件存储在我的表records
的XML
数据类型列data
中。SQL Server查询XML数据类型性能问题
表看起来是这样的:
create table records
(
id int,
type nvarchar(28),
data xml,
posted datetime
)
XML数据:
<Properties>
<data>
<Name>novel</Name>
<Gender>Female</Gender>
<Age>32</Age>
<Salary>55k</Salary>
<Phone>123-123</Phone>
</data>
</Properties>
我目前使用下面的查询,提取从XML列,其花费的时间比多分钟在20K记录数据
。
select
id,
posteddate,
CONVERT(NVARCHAR(500), data.query('data(Properties/data/Name)')) AS Name,
CONVERT(NVARCHAR(500), data.query('data(Properties/data/Gender)')) AS Gender,
CONVERT(NVARCHAR(500), data.query('data(Properties/data/Age)')) AS Age,
CONVERT(NVARCHAR(500), data.query('data(Properties/data/Salary)')) AS Salary,
CONVERT(NVARCHAR(500), data.query('data(Properties/data/Phone)')) AS Phone
from
records
where
type = 'personnel_xml'
我很新来SQL Server中的XML提取。我想我没有遵循标准优化方法来提取XML元素。
那么,任何人都可以帮助我如何优化这种情况,因为我需要从我的xml中提取100个这样的元素存储为列。
http://stackoverflow.com/users/1570000/john-cappelletti我的XML有单个数据元素,所以在这种情况下,我希望我不需要交叉应用。那么,从绩效的角度来看,应该选择哪一个,value()还是query()? – Aarush
@JohnCappelleti在'temp表中存储整个xml并从#temp中提取'或'直接从table.column中提取而不使用#temp'的情况下,对于我没有重复的200s元素场景的性能差异属性 – Aarush
@LearnByExample正确,因为你有单个数据元素,所以不需要交叉应用。因为你知道路径值比查询快。 –