java_66666 2018-08-29 07:51 采纳率: 0%
浏览 5711
已结题

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

  • 写回答

5条回答 默认 最新

  • qq_38535182 2018-08-29 07:56
    关注

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

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

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

    评论
  • _zming 2018-08-29 09:20
    关注

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

    评论
  • g-Jack 博客专家认证 2018-08-29 09:36
    关注

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

    评论
  • zhangpan_soft 2018-08-29 09:41
    关注

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

    评论
  • chinarealone 2018-08-30 08:53
    关注

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

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

    评论

报告相同问题?

悬赏问题

  • ¥15 activity升级到flowable工作流act_ge_bytearray的草稿json数据复制到act_de_model 的model_editor_json的脚本
  • ¥15 cvi使用CreateThread创建线程时,出现存储空间不足无法处理此命令的错误
  • ¥15 求苹果推信imessage批量推信技术
  • ¥15 ubuntu 22.04 系统盘空间不足。隐藏的docker空间占用?(相关搜索:移动硬盘|管理系统)
  • ¥15 c++ word自动化,为什么可用接口是空的?
  • ¥15 Matlab计算100000*100000的矩阵运算问题:
  • ¥50 VB6.0如何识别粘连的不规则的数字图片验证码
  • ¥16 需要完整的这份订单所有的代码,可以加钱
  • ¥30 写一个带界面控制的机房电脑一键开机关机并且实时监控的软件
  • ¥15 Stata数据分析请教