我有一個每個記錄有大約5MB數據的XML字段,但有時候我只需要讀取XML字段的一小部分。你可以想像,如果我讀了整個XML字段,然後使用LINQ到XML解析XML文件,並收集價值,這將是太慢和昂貴。所以,我想知道,是否有可能直接得到的值使用LINQ,而不是看整個XML領域?是否可以通過linq來執行XQuery?
我的DB是SQL Server 2008中
我有一個每個記錄有大約5MB數據的XML字段,但有時候我只需要讀取XML字段的一小部分。你可以想像,如果我讀了整個XML字段,然後使用LINQ到XML解析XML文件,並收集價值,這將是太慢和昂貴。所以,我想知道,是否有可能直接得到的值使用LINQ,而不是看整個XML領域?是否可以通過linq來執行XQuery?
我的DB是SQL Server 2008中
隨着提供我認爲最好的辦法是在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
這將創建利用在主索引中的路徑列(我們現在知道是一個表)一個二級索引。
最後,在程序運行(SQL)查詢,如這和提醒的是您的應用程序:
select XmlColumnName.query('/path/to/element')
from XmlTable
當然,這是不是一個LINQ查詢/解決方案,但國際海事組織它總是最好使用適合的工具,而不是試圖強制它。
有關XML索引更深入的信息,請參閱this msdn-article。
謝謝!但即使使用XmlReader,我仍然需要從數據庫中讀取整個XML字段(這會減慢我的應用程序,我認爲),然後使用XmlReader來選擇我想要的值。 – silent
@silent我已經更新了我的回答,請看看。 –