2012-08-13 54 views
3

我試圖創建一個數據庫的數據導入機制,需要讀者高可用性,同時按照他們的計劃提供新數據的不規則批量加載。大量索引子項的插入(Sql Server 2008)

新的數據只涉及三連正在一起添加新的數據集有許多新的數據集項目是由他們和幾個數據集元數據項的行引用這些引用的表。數據集可能有數以萬計的數據集項目。

數據集項目大量索引上與絕大多數列的幾種組合(但不是全部)讀取包括在where子句中的數據集ID。由於索引的原因,數據插入速度太慢以至於無法跟上流入,但由於這些索引的讀者優先,我無法刪除主表上的索引,但需要處理副本。

因此,我需要某種形式的工作臺面,我複製到的,插入並迅速重新索引之前轉換它成爲查詢的表/視圖的一部分。問題是我該如何快速執行該轉換?

我已經調查由一系列數據集的ID,這是一個外鍵分區數據集項目表,但因爲這不是主鍵SQL Server的一部分似乎並沒有作出這樣的容易。我無法用舊索引的更新版本切換舊的數據分區。

不同的文章建議使用分區,快照隔離和分區視圖,但沒有直接回答這種情況下,無論是對批量加載和舊數據的歸檔(按日期分區)或簡單的事務隔離不考慮索引。

有沒有直接解決這個看似普遍的問題的例子?

對於將大量新數據批量加載到大型索引表中時,真正減少索引被禁用的時間,人們有什麼不同的策略?

+0

請注意,如果讀者在一段時間內收到「陳舊」數據並不重要,因此交易不是太重要,我可以將作者分隔爲單個線索,但我希望將插入縮放並能夠並行更新多個數據集,可能是由一個寫入程序線程負責一個分區。 – 2012-08-13 11:23:06

+0

一些相關鏈接: http://social.msdn.microsoft.com/Forums/en-US/sqldatabaseengine/thread/e872ba33-cb3e-49f6-ada9-5152735aa0cb http://social.msdn.microsoft.com/Forums/en/sqldatabaseengine/thread/783c84a3-307a-46a6-8250-42816ede62f5 – 2012-10-18 12:31:28

+0

相關問題我從其他人那裏發現他們看起來像是在試圖實現同樣的事情。事情是我想能夠並行地添加並重新編譯多個分區。 既然您不能禁用分區級別的索引來重新定位另一個分區,我將不得不爲每個分區都有一個單獨的工作表,這意味着我必須將其作爲動態SQL來執行。 :( http://stackoverflow.com/questions/1367972/drop-index-at-partition-level http://stackoverflow.com/questions/2772738/sql-server-2008-disable-index-on-一個特定表分區 – 2012-10-19 15:00:32

回答

1

通知,在一個列分區需要列是聚簇索引鍵,而不是主鍵的一部分的部分。這兩個是獨立的。

儘管如此,分區對您可以在桌面上執行的操作施加了很多限制。例如,只有在所有索引對齊並且沒有外鍵引用要修改的表的情況下,切換纔有效。

如果你可以在所有這些限制下使用分區,這可能是最好的方法。分區視圖給你更多的靈活性,但有類似的限制:所有的索引顯然是對齊的,並且傳入的FK是不可能的。

分區數據並不容易。這不是一個點擊式嚮導和即將完成的解決方案。這組折衷是非常複雜的。

+0

好的,我理解聚簇索引與主鍵之間的區別,你能解釋一下分區視圖的額外靈活性嗎?在什麼情況下分區視圖比分區表更適合 – 2012-08-13 13:59:45

+0

當你需要不同的時候或者當你不希望分區鍵作爲CI的一部分時,你也可以有*不同的索引,你可以有一個帶有兩個基表的分區視圖:Archive和Stage。進入舞臺並在晚上將所有內容合併到檔案並截斷舞臺。 – usr 2012-08-13 14:09:16