0

我有一个带有自动生成的主键和一个 DateTime 字段的表。我们有几个客户端插入记录,使用来自客户端计算机的时钟作为日期/时间(即它不是真正的“时间戳”字段)。当记录按主键排序时,我遇到过很多日期/时间是小时的情况。起初,我认为客户端计算机时钟已关闭。但我越来越多地认为它可能是数据库上的某种缓存机制。

有什么可以解释的吗?

4

1 回答 1

3

Oracle 不缓存插入或更新:当 DML 语句完成时,意味着更改已经完成。当您提交时,它们是永久性的。

但是,Oracle 可以缓存标识符的生成。如果您的主键是由序列生成的,默认情况下 Oracle 将缓存 20 个键,并且不保证这些键将按照它们被询问的顺序分布。

使用ORDER关键字:

[...] 保证按照请求的顺序生成序列号。如果您使用序列号作为时间戳,则此子句很有用。对于用于生成主键的序列,保证顺序通常并不重要。

例子:

CREATE SEQUENCE your_sequence ORDER

当然,这假设所有插入也使用SYSTIMESTAMPor SYSDATE,如果它们使用客户端日期设置,Oracle 无法对插入进行排序。

最终,它真的很重要吗?对于大多数应用程序来说,只有唯一性很重要,并且可以用 GUID 替换自动增量字段。特别是因为您已经有一个时间戳列。

于 2012-10-10T15:39:30.763 回答