我不太了解数据库找到正确的词来提出这个问题,所以让我举一个例子来解释我正在尝试做的事情:假设我希望表的主键是一个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
对于索引原因,第二个表会更有效吗?或者第一张表完美无缺?谢谢!
答案 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分隔)对于聚簇索引不是问题。
对于非聚集索引,订单并不重要。可以为主键插入随机值,只要它们是唯一的。