MySQL中字段用int时间戳还是用timestamp?因为查询时该字段上有比较多的范围查询?哪种性能会比较好一点。

created_at列加索引的前提下。
表数据量千万级别。
explain显示扫描行数是二百万的级别
select count(*) from users where created_at<'2018-08-28 00:00:00' and created_at>='2018-08-01 00:00:00'
count大概是四五十万级的别。这种范围查询 created_at用int时间戳和timestamp性能上哪种会比较好

阅读 6.1k
5 个回答

试了一下,范围查询,int和timestamp, int性能更优,试了多次,用了多张表,表数据量在千万级,explain结果中rows也差不多千万,select count(1) from ... timestamp用的时间差不多每次都是int的4倍。

建议你用timestamp就行了,如果你需要利用timestamp进行范围查询,可以在该列添加索引。

如果从数据类型来说,timestamp占用的空间比较小,但是timestamp有个特性,在更新的时候会自动更新为当前时间,注意这个就好了

如果为了可视化,也就是在数据库中能够方便对看到数据时间,建议是保存为datetimetimestamp 还存在2038这个坎。

换句话说说你既然考虑int而不是bigint或者说varchar,那么就可以默认为你选择了最多精确到

在这种情况下的话呢,建议还是采用 datetime

https://dev.mysql.com/doc/ref...

MySQL converts TIMESTAMP values from the current time zone to UTC for storage, and back from UTC to the current time zone for retrieval. 

TIMESTAMP 类型的这种转换操作,相较于 INT,可能使查询变慢。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏