2011-08-11 87 views
0

我有一個每個記錄有大約5MB數據的XML字段,但有時候我只需要讀取XML字段的一小部分。你可以想像,如果我讀了整個XML字段,然後使用LINQ到XML解析XML文件,並收集價值,這將是太慢和昂貴。所以,我想知道,是否有可能直接得到的值使用LINQ,而不是看整個XML領域?是否可以通過linq來執行XQuery?

我的DB是SQL Server 2008中

回答

1

隨着提供我認爲最好的辦法是在SQL Server中使用XML索引的當前信息。

有四種類型的XML索引:

  1. 主要
  2. 繼發PATH
  3. 二級物業
  4. 二次VALUE的

你的情況,看來你知道你想要的數據的路徑,自然是一個輔助PA​​TH指數似乎是最合適的。

按照以下步驟來創建這個索引:

創建主索引

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

+0

謝謝!但即使使用XmlReader,我仍然需要從數據庫中讀取整個XML字段(這會減慢我的應用程序,我認爲),然後使用XmlReader來選擇我想要的值。 – silent

+0

@silent我已經更新了我的回答,請看看。 –

相關問題