我的数据库将存储大量的数据点,所以我使用一个无符号的BIGINT作为主键。使用DATETIME对象作为主键有意义吗?谢啦
wlwcrazw1#
是的,当然,如果需要唯一地标识离散的时间点或时间段,那么将日期/时间作为键或键的一部分是有意义的。我不能说这是否适用于您的场景,但作为一般规则,没有根本原因表明键不能基于时间-几乎所有数据仓库都是这样做的。
polhcujo2#
不,因为不能保证它是唯一的。坚持使用BIGINT。您可以在DateTime上放置一个很好的索引以进行查询,这就足够了。
ygya80vv3#
这是没有意义的,因为您将被限制为每秒一个记录,而没有任何实际的原因。
zaq34kh64#
如果您的数据来自一个按时间排序的集合,则这是有意义的。比如说,金融交易记录。如果您有多个数据点,这些数据点自然发生在不同的时刻,但由于舍入而具有相同的时间戳,请更改低阶位以区分它们。这是MySQL中的moreproblematic,而不是other数据库,因为时间戳仅以1秒的精度存储。(编辑:从5.6.4开始,MySQL在时间类型上具有微秒精度)
z4iuyo4d5#
如果您碰巧每秒有多个观测,则此操作将失败。由于这个原因,最好不要这样做,除非你能保证每秒不会超过一点。
5条答案
按热度按时间wlwcrazw1#
是的,当然,如果需要唯一地标识离散的时间点或时间段,那么将日期/时间作为键或键的一部分是有意义的。我不能说这是否适用于您的场景,但作为一般规则,没有根本原因表明键不能基于时间-几乎所有数据仓库都是这样做的。
polhcujo2#
不,因为不能保证它是唯一的。坚持使用BIGINT。您可以在DateTime上放置一个很好的索引以进行查询,这就足够了。
ygya80vv3#
这是没有意义的,因为您将被限制为每秒一个记录,而没有任何实际的原因。
zaq34kh64#
如果您的数据来自一个按时间排序的集合,则这是有意义的。比如说,金融交易记录。如果您有多个数据点,这些数据点自然发生在不同的时刻,但由于舍入而具有相同的时间戳,请更改低阶位以区分它们。
这是MySQL中的moreproblematic,而不是other数据库,因为时间戳仅以1秒的精度存储。(编辑:从5.6.4开始,MySQL在时间类型上具有微秒精度)
z4iuyo4d5#
如果您碰巧每秒有多个观测,则此操作将失败。由于这个原因,最好不要这样做,除非你能保证每秒不会超过一点。