我在MS SQL Server 2008中有一个 tbl_Data 表,它有两个字段, ID 是主键, CustomFields 列可以有XML数据。
[ID] [uniqueidentifier] [CustomFields] [xml] NULL
XML中的平均节点 - 每个记录中有25个节点(某些记录为空,有些记录最多有70个节点) tbl_Data中的总记录数:80000行。
以下是CustomFields Column的示例数据。
<Fields>
<Field Id="StatusName" Value="Approve" />
<Field Id="LogNumber" Value="70470" />
<Field Id="SubmittedDate" Value="Feb 7 2012 12:00AM" />
..
<Fields>
我正在尝试执行以下查询以检索具有LogNumber 70470的记录,此查询需要1分钟才能生成结果。
SELECT ID FROM [tbl_Data] WHERE CustomFields.exist('/Fields/Field[@Title = "LogNumber"]') = 1 AND CustomFields.exist('/Fields/Field[@Value="70470"]') = 1
我曾尝试应用XML索引,但似乎没有帮助。
您非常欢迎您提出宝贵的建议或建议,以提高数据检索性能,即我是否需要更改XML结构?
由于 苏雷什
答案 0 :(得分:1)
正如此响应here (link)所解释的那样,通过在XML列中同时使用模式和索引,可以显着提高XML查询的性能。基本上,创建适用于您的数据的模式集合,将列更改为该数据类型,添加XML索引和利润。
在我的情况下,默认情况下,将一个巨大的XML文件粉碎成各种形式的数据需要几天时间。索引将其减少到大约10个小时,而使用模式将其减少到20秒,这已经足够好了。