2012-10-01 41 views
4

我們今天的設置使用XML數據並將該數據拆分爲SQL中的多個表。這樣做的唯一好處是報告很好。但是,無論何時我們想要檢索數據,我們都必須重新綁定來自數百個表的所有數據以重新導出XML。每個XML可以是幾MB到幾GB。諷刺的是,我們很少運行報告,但經常檢索/保存數據。由於將其拆分/編譯爲幾個表,保存和檢索都不是非常有效。SQL - 使用BLOBS查詢

由於數據是以XML形式出現的,因此我正在考慮更新我們的方法並將XML作爲大型BLOB保存到表中。那會很簡單。

現在的問題是報告 - 沒有索引blob的能力我想知道我可以運行儘可能高效的報告。

該數據庫在100個GB中。我不是DBA(我是一個C#人員) - 我剛剛在工作中着手這個位置,所以我可以考慮的唯一方法就是使用C# - 將每個BLOB構建爲XML,然後在C#中查詢XML數據。但是,這似乎是非常低效的。也許SQL中的XQuery更好?!儘管不是DBA,但我對任何編程(C#/ VB)或SQL建議感到滿意。

+0

爲什麼你正在爲難以運行的報告進行優化,而不是一直在進行回收/保存?這些報告是否可以計劃提供給希望看到它們的人,還是需要按需運行? – BlackICE

+0

@大衛 - 我不是。我已經進入了一個發生這種情況的位置,我們改進系統的順序是由其他人決定的!報告不會按需提供。 – Dave

+0

如果報告不是按需提供的,我會按建議操作,並使用XML數據類型列並設計報告,否則這似乎是傳統的CQRS問題。 – BlackICE

回答

3

您可以將數據保存在數據庫中的一個XML-type column中,然後通過XQuery訪問數據。

XQuery是對我個人而言,有點繁瑣,但我發現提示這個名單有很大的幫助:

http://www.jackdonnell.com/?p=266

的好處是,你只堅持了數據的一個版本所以更新和讀取速度很快,除了XML解析位(但可能取決於您的數據量)。從C#中將數據導入數據庫非常簡單,因爲您可以將XML映射到相應的SqlDbType

+0

謝謝你。我不知道有一個XML數據類型。 – Dave

+0

@Dave:我認爲它是2GB – davek

+2

xml數據類型出現在SQL Server 2005中,並且如果沒有安裝SQL Server的一些修補程序,複雜查詢的性能非常糟糕。至少這是我們在針對完全打補丁的2005系統開發並部署到未修補的系統之後的經驗。如果你使用2008,你應該沒問題。還有一些xml索引會索引文檔中的每個節點,以便您可以在xml中快速檢索數據。 – Tobsey