2015-04-14 73 views
0

我有一個駐留在第三方的數據庫的「日誌傳送」副本。日誌傳送每15分鐘運行一次,此時數據庫的所有連接都將被丟棄。數據庫用於報告目的。SQL Server中的MERGE與DROP表和重建索引

我決定從日誌發運(只讀)數據庫中的一些數據到每晚刷新一個新的數據庫。這將允許用戶連接到新的數據庫,而不會因日誌傳送而失去連接性。 (它還允許使用更細粒度的安全權限,因爲只讀副本不能被編輯)

我能想到2種模式來完成這個任務。

  1. 刪除表,創建表,創建索引
  2. 使用MERGE語句來插入/更新/刪除記錄

我一直在使用上面的方法1中實現的解決方案,它工作得很好。

這讓我感覺有點沉重,每天都會丟掉所有的數據。上面的方法1是否有任何副作用,會促使我使用方法2?

提供規模感,我只是同步3個表,

Table 1 - 38 columns - 13,110 rows 
Table 2 - 82 columns - 17,421 rows 
Table 3 - 22 columns - 249 rows 

產生的數據庫是〜1.3 GB。 (還有其他一些表格)

我很感謝關於方法1和2的指導,以及是否有另一種方法,我沒有想到。

+0

你看過事務複製嗎?我沒有足夠的知識來實際上幫助更多,但它可能是一個值得選擇的選項 – mxix

+0

我沒有看到這個問題的背景下,因爲日誌傳送是我們的供應商支持的方法爲了獲得我們的數據副本。我假設由於日誌傳送的副本是隻讀的,因此我無法將其用於事務複製。 –

回答

2

TRUNCATEINSERT比丟棄或合併更有效。

+0

我喜歡那樣。我會放棄這一點,並將其與我的drop/create進行比較。謝謝! (我會在今天晚些時候再次訪問這個問題)。 –

+0

謝謝你。從時鐘的角度來看,這兩種方法在大約12秒內完成。我喜歡''TRUNCATE'和'INSERT INTO'的乾淨程度,以重建所有索引。我不得不對存儲過程進行一些修改,以使用CTE而不是#Temp表來獲取'INSERT INTO'的工作方式,但是通過這個障礙後,我現在已經有了更清晰的代碼。謝謝。 –