2012-02-22 52 views
-1

我在數據庫中有一個字段是XML,因爲它表示在C#/ VB.Net中使用的類。問題出在最初的操作之後,大多數但不是全部的操作都是在SQL Server中完成的。這意味着XML字段即時轉換。更快地在SQL Server中創建XML - 轉換爲表格?

隨着我們獲得更多的字段和更多記錄,此操作變得越來越慢。我認爲減速是將所有這些字段轉換爲其他數據類型。

於是加快步伐我想幾個途徑:

有一組代表不同的部分XML數據的表。我只會使用插入/更新上的觸發器來使這些表讀取,這會拒絕任何更改。當它更新XML時,我的「主」表格中包含XML,會關閉觸發器,用新值更新表格,然後重新打開觸發器。

我們使用XML的唯一真正原因是因爲它很容易將它轉換爲C#/ VB.Net中的類。但是我得到的結論是,我最終可能會編寫一個例程,它將採取所有的零碎工作,並將其轉換爲類,並且還可以用另一種方式(類 - >表)將其轉換爲函數。

任何人都可以提供任何想法,以更好的方式來做到這一點?我並不想使用XML結構。我擔心的是,如果我們有單獨的表來加速SQL處理,並且有人更改了表中字段的值,我們必須確保XML已更新。或者不允許該人更新它。

TIA - Jeff。

+2

代表一個C#類本身不是一個使用XML而不是關係表的特別好理由。 – 2012-02-22 21:14:58

+0

如果您在sql中操作類表示形式,它不再是可靠的表示形式,因此完全浪費空間。停止搞亂,承認你「弄錯了」,拋棄xml,讓班級自己從表格數據中加載。 – 2012-02-22 21:24:59

回答

0

你正在保存的對象的目的是什麼?如果除了國家堅持以外的任何其他事情,你不會對自己有任何好處,而且你也沒有把問題分開。如果它們是狀態的持久性,那麼至少可以從屬性和域中創建列(只要在重構時留下內部方法來設置值)就可以包含私有。

0

無視您正在做什麼的智慧,您可能會考慮創建一個XML索引。這應該可以幫助你開始:http://msdn.microsoft.com/en-us/library/ms345121%28v=sql.90%29.aspx

基本的想法是,正確的索引可以「預先粉碎」你的XML並自動構建你正在考慮做'手動'的表的索引。不利的一面是,如果你存儲了大量的XML,這可以真正提升你的存儲需求。

+0

我想我必須將其轉換爲表。 – user1226859 2012-02-23 14:01:32

+0

我認爲真正的問題是當我拉取記錄時,必須'unxml'XML表。我們經常需要很多東西,所以我們花了很多時間調用一個視圖來轉換它。我假設我一直在失去的地方。 – user1226859 2012-02-24 14:37:20

+0

XML索引可以爲您預先unxml XML列。我鏈接的文章解釋得很好。如果您通過視圖獲取XML,您可能會超越SQL引擎並使事情變得更糟? – Andrew 2012-02-24 16:43:56