将非顺序ID作为数据库中表的主键是否可以?

时间:2015-11-18 21:58:54

标签: mysql sql database indexing id

我不太了解数据库找到正确的词来提出这个问题,所以让我举一个例子来解释我正在尝试做的事情:假设我希望表的主键是一个ID我从API中获取,但大多数API请求导致404错误。结果,我的表​​格看起来像这样:

我也不知道如何在Stack Overflow上格式化类似于表的结构,所以这将是一个粗略的视觉效果:

Update-Database -Script -SourceMigration:0

ID是否可以按顺序分隔1位?或者我应该这样做:

API_ID_PK | name
------------------
1         | Billy
5         | Timmy
23        | Richard
54        | Jobert
104       | Broccoli

对于索引原因,第二个表会更有效吗?或者第一张表完美无缺?谢谢!

3 个答案:

答案 0 :(得分:6)

不,如果您有非连续的ID,则不会对效率产生任何影响。事实上,MySQL(和其他数据库)允许您设置变量auto_increment_increment以使ID增量超过1.这通常用于多主设置。

答案 1 :(得分:1)

没有顺序的ID很好。在处理企业软件时,我经常使用GUID作为ID,其中多个企业可以共享同一个对象而且它们从不是连续的。

要注意的一件事是数字是否相同。什么决定了你要存储的ID值?

答案 2 :(得分:0)

如果ID列上有聚簇索引(Sql-Server)并插入具有随机值的ID(如Guids),则会产生负面影响,因为聚簇索引的物理顺序对应于逻辑顺序。这可能导致很多索引重组。请参阅:Improving performance of cluster index GUID primary key

但是,有序但非连续的值(值不以1分隔)对于聚簇索引不是问题。

对于非聚集索引,订单并不重要。可以为主键插入随机值,只要它们是唯一的。