聚簇索引和分布式数据库

时间:2012-09-19 08:30:20

标签: sql-server azure indexing azure-sql-database

我有一个将由多个客户端(本地安装)使用的数据库,计划是将数据复制到Azure以允许全局报告等。

数据库将使用GUID作为主键。

我应该对表上的聚簇索引使用什么,或者在向Azure中添加数据时无关紧要?我真的需要聚集索引吗? Azure将拥有数据库的单一副本,如果有所不同,则包含所有客户端数据。

谢谢大家。

2 个答案:

答案 0 :(得分:1)

虽然您可以在SQL Server中创建没有聚簇索引的表(并且有数据),但在Windows Azure SQL数据库(WASD / SQL Azure)中不允许这样做。虽然您可以在WASD中将没有聚簇索引的表作为定义,但是不允许对这样的表执行DML语句,即,如果没有聚簇索引,您将无法对WASD中的表执行INSTERT / UPDATE / DELETE语句。因此,如果数据有可能进入云,则应该有聚簇索引。有关详细信息,请查看Guildelines中的Clustered Index Requirement和Windows Azure SQL数据库的限制。

答案 1 :(得分:1)

此处的部分建议不正确。

  1. SQL Azure上不允许使用NEWSEQUENTIALID()。
  2. 在SQL Azure中,绝对需要聚簇索引。您可以创建一个表 没有一个,但直到之后你才能添加数据 你添加聚集索引。
  3. 在Azure中,聚簇索引用于其后端复制。参考:http://blogs.msdn.com/b/sqlazure/archive/2010/05/12/10011257.aspx

    我认为最好的办法是使用一个带有Identity元素的列作为聚簇索引,以及guid列上的非聚簇索引。我遇到了同样的问题,经过相当多的研究,这是我最终提出的解决方案。组合起来有点痛苦,特别是如果你已经在Azure上有生产数据,但它似乎是解决所有问题的。

    我觉得使用NEWSEQUENTIALID最简单,但这不是Azure的选项。