自从今天早上以来,我在Google上搜索了一个问自己的问题,但找不到任何相关信息或文章。

我想知道在以下情况下是否可以提高性能(仍然有百分之几):

上下文:我有两列:IDAddedAt(AddedAt是创建行时的Unix时间戳)。

理论上,如果您插入新行,则ID将为+1,而AddedAt将为当前时间。

现在,让我们说在当前情况下不可能同时进行两次插入,将AddedAt用作PK并删除ID列会更好吗? AddedAt将是唯一执行PKUNIX Timestamp的唯一列。因此,在最后,我将有一列而不是两列。

我看到的唯一不好的一面可能是将在AddedAt上创建的密钥的大小,因为今天的unix时间戳是10位数字。

在这种情况下会更好吗?你怎么看 ?

编辑:使用时间戳+ ms怎么办?

最佳答案

时间戳以秒为单位。尽管您可能没有同时插入,但随着世界趋于加速,您可能会在一秒钟内获得多个插入。使您的系统正常运行-不要将时间戳用作主键。

同样,使用语句复制有时在所有数据库之间的时间戳都不一致...基于行的复制可以缓解这种情况,但这仍然是使用它们时需要关注的另一个原因。

从良好的约定的角度来看,主键对您自己之外的其他人应该具有明确的含义,而不仅仅是我们一个普通的旧自动递增id字段。通常,人们期望键的数字或char值,而不是blob,时间戳,日期时间等东西。如果在以后将其用作另一个表中的外键,使用时间戳作为外键可能会造成混淆,则尤其如此。给以后的开发者。当然,如果您知道一个唯一的varchar GUID字段,请使用它作为键。只要记住当用作外键时,如果字符串很大,您将要消耗很多内存。

07-26 09:41