SQL Azure SPLIT ON UNIQUEIDENTIFIER GUID

时间:2012-06-04 17:51:50

标签: sql asp.net-membership azure-sql-database

假设有一个应用程序生成与几个表中的规范化记录数相对应的随机GUID。具有GUID“tenant_id”的这些记录需要在SQL Azure中拆分为多个联合成员。发出SPLIT AT命令时,使用什么排序机制在特定点(tenant_id)拆分成员?它是否类似于ORDER BY GUID_FIELD ASC / DESC结果集?由于GUID是随机生成的,因此使用将来拆分创建范围的最佳方法是什么?

谢谢

2 个答案:

答案 0 :(得分:0)

基本上,split将单个联合分成两个。它依赖于分发键(您在federated on子句中传递的键)。例如,假设您按年龄联邦。原则上,您有两个联合:年龄从0到40,年龄从41到80.现在您将第一个联合分成两部分:0到20和21到40. SQL Azure将自动组织数据以确保每个联合会满足范围要求。所以,是的,它有点像排序。

通常在GUID上不使用联合。相反,它用在一些你有更多控制权的键上。使用GUID很好,但是您有可能使联盟失衡。一个联邦可能包含大量数据,而另一个联盟只有一点点。

答案 1 :(得分:0)

GUID范围根据SQL Server中的排序顺序进行拆分 - 与ORDER BY和索引的排序顺序相同。有关详细信息,请参阅此博文:http://sqlblog.com/blogs/alberto_ferrari/archive/2007/08/31/how-are-guids-sorted-by-sql-server.aspx

如果要随机生成GUID并且需要拆分,则应使用GUID的排序定义在要拆分的成员中的GUID集合中间的某处选择一个点(假设您要拆分中间)。

如果您想要更多地控制租户去哪里,您可以生成自己的“自定义”GUID,但是当然您将丢失GUID所具有的全局唯一性属性,除非您确保全局唯一生成“自定义” “GUIDs。

- 汉斯奥拉夫