2012-09-19 39 views
1

我有一個會被多個客戶端(本地安裝)中使用的數據庫,該計劃是然後將數據複製到Azure中,讓全球報告等聚集索引和分佈式數據庫

該數據庫將使用的GUID因爲它是主鍵。

我應該如何使用表上的聚集索引,或者在將數據添加到Azure時這些無關緊要?我甚至真的需要一個聚集索引嗎? Azure將擁有數據庫的單一副本,如果這有所幫助,則所有客戶端數據都將包含在該數據庫中。

謝謝大家。

+0

感謝迄今爲止的答案。有沒有人知道如果聚集索引中發生碰撞會發生什麼?假設我使用int Identity列作爲索引,數據上傳到Azure時的衝突幾乎得到保證。 – Jay

+0

只要聚集索引不是主要的,那麼你不應該有任何問題。 – knightpfhor

+0

優秀。謝謝! – Jay

回答

1

雖然您可以在SQL Server中創建(並且擁有數據)一個沒有聚集索引的表,但這在Windows Azure SQL數據庫(WASD/SQL Azure)中是不允許的。雖然可以將WASD中沒有聚簇索引的表定義爲定義,但是不允許針對這樣的表執行DML語句,即無法在沒有聚簇索引的情況下針對WASD中的表執行INSTERT/UPDATE/DELETE語句。因此,如果有數據傳到雲端,您應該有一個聚集索引。有關更多信息,請查看Guildelines中的Clustered Index Requirement和Windows Azure SQL數據庫的限制。

1

這裏的一些建議是不正確的。

  1. SQL Azure上不允許NEWSEQUENTIALID()。
  2. 在SQL Azure中,聚集索引是絕對必需的。您可以創建一個沒有 的表格,但直到 添加聚簇索引後,才能向其添加數據。

在Azure中,聚簇索引用於其後端複製。參考:http://blogs.msdn.com/b/sqlazure/archive/2010/05/12/10011257.aspx

我認爲你最好的選擇是使用一個標識元素作爲聚集索引的列,以及你的guid列上的非聚集索引。我遇到了這個完全相同的問題,經過相當多的研究,這是我最終提出的解決方案。將它們放在一起會有點痛苦,特別是如果您已經在Azure上製作了數據,但似乎解決了所有問題。

我覺得使用NEWSEQUENTIALID最簡單,但這不是Azure上的選項。