我有一个XML字段,每个记录有大约5MB的数据,但有时,我只需要读取XML字段的一小部分。可以想象,如果我读取整个XML字段然后使用Linq-to-XML来解析XML文件并收集值,那么它将太慢而且昂贵。所以我想知道,是否可以直接使用Linq获取值而不是读取整个XML字段?
我的数据库是SQL Server 2008
答案 0 :(得分:1)
根据提供的当前信息,我认为最好的解决方案是在SQL Server中使用XML索引。
有四种类型的XML索引:
在您的情况下,您似乎知道所需数据的路径,自然地,辅助PATH索引似乎是最合适的。
请按照以下步骤创建此索引:
创建主索引
create primary xml index XIX_XmlColumnName on XmlTable(XmlColumnName)
go
这将为你的xml列创建“基础”索引,基本上这意味着xml将被粉碎到一个隐藏的表并存储值,其中每个元素都被转换为一行。
创建辅助路径索引
create xml index XIX_XmlColumnName_Path on XmlTable(XmlColumnName)
using xml index XIX_XmlColumnName for path
go
这将使用主索引中的path-column创建一个二级索引(我们现在知道它是一个表)。
最后,在一个过程中运行一个(sql)查询,并从你的应用程序中调用它:
select XmlColumnName.query('/path/to/element')
from XmlTable
当然,这不是一个linq查询/解决方案,但是最好使用适合的工具,而不是试图强制它。
有关xml索引的更深入信息,请参阅this msdn-article。