在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性能上哪种会比较好
在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性能上哪种会比较好
如果为了可视化
,也就是在数据库中能够方便对看到数据时间,建议是保存为datetime
,timestamp
还存在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,可能使查询变慢。
3 回答1.7k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
2 回答1.3k 阅读✓ 已解决
1 回答1k 阅读✓ 已解决
3 回答1.6k 阅读
2 回答981 阅读✓ 已解决
试了一下,范围查询,int和timestamp, int性能更优,试了多次,用了多张表,表数据量在千万级,explain结果中rows也差不多千万,select count(1) from ... timestamp用的时间差不多每次都是int的4倍。