在大型数据集上使用交叉连接的Xml查询。如何提高性能

时间:2011-12-05 15:36:51

标签: sql-server xml sql-server-2005 xpath

我有以下查询,对于100条记录大约需要50秒,但是使用计数我已经确定结果集将是10万条 (这是一份报告)所以我正在寻找提高绩效的方法。

SELECT TOP 200
OL.*,
LI.LineItem.value('Field[@name="storename"][1]/@value', 'varchar(MAX)') AS storename,
LI.LineItem.value('Field[@name="pwnumber"][1]/@value', 'varchar(MAX)') AS pwnumber,
LI.LineItem.value('Field[@name="department"][1]/@value', 'varchar(MAX)') AS department,
LI.LineItem.value('Field[@name="item"][1]/@value', 'varchar(MAX)') AS item,
LI.LineItem.value('Field[@name="barcode"][1]/@value', 'varchar(MAX)')AS barcode,
LI.LineItem.value('Field[@name="oldprice"][1]/@value', 'varchar(MAX)')AS oldprice,
LI.LineItem.value('Field[@name="newprice"][1]/@value', 'varchar(MAX)')AS newprice,
LI.LineItem.value('Field[@name="goodsgroup"][1]/@value', 'varchar(MAX)')AS goodsgroup,
LI.LineItem.value('Field[@name="startdate"][1]/@value', 'varchar(MAX)')AS startdate,
LI.LineItem.value('Field[@name="prodgroup"][1]/@value', 'varchar(MAX)')AS prodgroup,
LI.LineItem.value('Field[@name="season"][1]/@value', 'varchar(MAX)')AS season,
LI.LineItem.value('Field[@name="pkquantity"][1]/@value', 'varchar(MAX)')AS pkquantity,
LI.LineItem.value('Field[@name="recordtype"][1]/@value', 'varchar(MAX)')AS recordtype
FROM [lines] OL
LEFT JOIN [Clineextension] OLE ON OL.OrderLineId = OLE.OrderLineId
CROSS APPLY OLE.LineItems.nodes('/LineItems/LineItem') as LI(LineItem)
WHERE Customer = 1302
AND StatusId > 1

我认为特别是select语句可以改进,但我不确定如何。

任何想法? 非常感谢任何帮助。

其他信息 sql server 2005 所有权利 xml字段因客户而异

1 个答案:

答案 0 :(得分:0)

在XML列上使用索引,性能将大幅提升。