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性能上哪种会比较好

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

至于性能上哪种会比较好,我没有试过,以下是我推测给的建议:因为实际上mysql内部存储日期实际上就是整数,仅仅是表现形式不太一样,timestamp更易读,所以,我不认为这二者性能会有多大差距。如果可以,你可以造几十万条数据来测试一下我的猜测。测试时注意查询缓存的影响。

https://www.roncoo.com/course/list.html?courseName=mysql

个人建议不要用timesstamp,timesstamp占用存储大,不同数据库版本不兼容,数据库移植比较麻烦。timestamp还会存在时区问题,如果数据库所在机器
的时区设置不正确,会导致你的日期不准确,这个很麻烦。
最通用的还是存储毫秒数或者日期字符串,至于用整型的毫秒数还是日期字符串就看你怎么方便了,毫秒数所用字节数少一点,就是查询的时候要将标准的日期字符串转成毫秒再查,稍微麻烦点,还有就是不直观。所以一般用日期字符串存比较通用

个人建议采用int 这样操作起来非常方便,添加索引,并且保证你写的sql 所以会生效,就ok了

个人建议毫秒计数,建议long类型,

如果单纯考虑新能,差异不会太明显,int与时间戳的本质都是数值。
不过从数据库设计来说,应该考虑的是timestamp还是datetime
1. 如果要利用自动初始化和更新的特性,必须选timestamp
2.如果需要与时区相关,必须选timestamp
3.如果普通业务的日期,选择datetime

至于int存储时间戳,除非需要直接存储和获取unix时间戳(例如嵌入式系统通讯和同步),没必要考虑。举个例子,常常应用于嵌入式系统的sqlite数据库,
其时间戳天然的是int的unix时间戳。