给定一个应用程序,其中大多数表的主键是uuid,那么这些表上的聚集索引的最佳选择是什么?当主键无法使用时,聚簇索引的最佳选择是什么?
- 聚簇索引是必需的,因为后端数据库是Azure SQL Server,而Azure需要聚簇索引。
- uuid是一种设计选择,可满足n个客户端在断开状态下创建实体并在连接时进行同步的需要。
- 我们不使用主键作为聚簇索引以避免由于uuids的随机性而导致的碎片问题。
考虑到以下数据类型:
int
或bigint
。简单 - 可以自动递增(好/坏),但似乎很随意,并且实用性有限。感觉最像一个黑客。datetime
- 增加的实用程序 - 可能是createdOnServer
列。但会导致一些愚蠢的,因此需要uniqueness(这是多大的一个问题,我不知道)datetime2
- 比datetime
更宽,但更高的精度和更少的欺骗。
寻找哪些是最好的,需要考虑的事项或其他想法的评论。
如有疑问,请记住KISS。采用简单的解决方案。 –
我不想告诉你 - 客户没有这个要求。例如:有些开发人员不够聪明,可以将数据库侧主键与基于仿真GUID的行标识分开。您没有理由将GUID作为数据库端主键。 – TomTom