无法使用主键时,聚簇索引的最佳选择是什么?

时间:2016-02-04 17:50:03

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

给定一个应用程序,其中大多数表的主键是uuid,这些表上的聚簇索引的最佳选择是什么?

  • 聚簇索引是必需的,因为后端数据库是Azure SQL Server,Azure需要聚簇索引。
  • uuid是一种设计选择,可满足n个客户端在断开连接状态下创建实体的需要,然后在连接时进行同步。
  • 我们没有使用主键作为聚集索引,以避免由于uuids的随机性而导致的碎片问题。

考虑以下数据类型:

  • intbigint。简单 - 可以自动递增(好/坏)但看起来如此随意且实用性有限。感觉最像是黑客。
  • datetime - 增加效用 - 可以是createdOnServer列。但是会导致一些欺骗,因此需要使用独特的东西(这个问题有多大,我不知道)
  • datetime2 - 比datetime更宽,但更高的精度和更少的愚蠢。

寻找评论最佳,需要考虑的事项或其他想法。

2 个答案:

答案 0 :(得分:1)

我不知道为什么你会解雇自动递增int。任何广泛使用的东西,效果都很好,只要你不打算将表(通过联盟)与其他版本的表合并,你为什么不想使用它?它将为平衡的B树提供非常好的键(不太宽),聚集索引在幕后。请记住,在具有聚簇索引的表中,所有其他索引都将使用聚簇索引列来到达所需的页面和行,以便您希望尽可能小。

答案 1 :(得分:0)

如果您不想创建索引,可以考虑升级/移动到V12 Azure SQL数据库。这些不需要聚集索引。

在索引本身上:您应该在查询的列上创建它。例如,如果您在UUIDs +日期上进行查找,则应在二者上创建索引以支持您的查询。