时间戳比 MySQL 中的 datetime 列快多少?
Posted
技术标签:
【中文标题】时间戳比 MySQL 中的 datetime 列快多少?【英文标题】:How much faster is timestamp than datetime column in MySQL? 【发布时间】:2010-12-11 23:59:21 【问题描述】:这包括两个问题:
在“order by”查询中,mysql 的时间戳字段真的比日期时间字段快吗?
如果上述问题的答案是肯定的,它可以快多少?假设在一个 1 亿行的表中,并且经常根据 MySQL 内部的时间戳字段对一堆 100-20 万行进行排序,是否会通过在外部程序中将时间戳转换为可读的字符串格式来抵消排序时间的改进?
【问题讨论】:
【参考方案1】:最简单的找出方法是编写一个单元测试,然后实际得到一些数字。
我的理论是时间戳会更快,但根据这个博客我错了: http://dbscience.blogspot.com/2008/08/can-timestamp-be-slower-than-datetime.html
这就是为什么在我决定优化哪里之前,我倾向于通过分析来获取数字,因为我的直觉有时会非常错误。
因此,这可能取决于您使用的 MySQL 版本,但似乎 datetime 可能更快。
【讨论】:
【参考方案2】:据我所知,在 DATETIME 上使用 TIMESTAMP 的主要好处是能够在创建行时自动将值设置为当前时间,并能够将其(或稍加努力的另一列)设置为当前时间行更新时间。这允许自动创建和修改日期。
由于 TIMESTAMP 列的其他限制(例如,不接受超出特定范围的日期或在服务器时区更改时更改),如果您不需要其中之一,则 DATETIME 将更可取上面的两个特征。
但是,如果您只是对将 Unix 时间戳存储在数据库中而不需要数据库对其进行转换感兴趣,则可以直接将其存储为无符号整数并稍微提高性能。
【讨论】:
@Jason:你觉得像 NOW() 那样设置参数有什么作用? 我知道。不同之处在于 TIMESTAMP 值在未在 INSERT 或 UPDATE 中指定的情况下被设置。就我个人而言,我使用 DATETIME,我的数据库抽象层会自动为我更新创建和修改的字段。 @Jason,感谢您的意见。在这种情况下我只关心数据排序性能,时间戳字段的范围限制不是问题。我知道时间戳字段的另一个优点是它需要 381.5MB 更少的磁盘空间来处理一个 1 亿行的表。以上是关于时间戳比 MySQL 中的 datetime 列快多少?的主要内容,如果未能解决你的问题,请参考以下文章
将存储在mysql(utc格式)中的momentjs datetime格式化为Local DateTime