# 后数据准备

通过程序往数据库插入50w数据

数据表:

CREATE TABLE `users` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `time_date` datetime NOT NULL,  `time_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,  `time_long` bigint(20) NOT NULL,  PRIMARY KEY (`id`),  KEY `time_long` (`time_long`),  KEY `time_timestamp` (`time_timestamp`),  KEY `time_date` (`time_date`)) ENGINE=InnoDB AUTO_INCREMENT=500003 DEFAULT CHARSET=latin1

实体类users

/** * @author hetiantian * @date 2018/10/21 * */@Builder@Datapublic class Users {    /**     * 自增唯一id     * */    private Long id;    /**     * date类型的时间     * */    private Date timeDate;    /**     * timestamp类型的时间     * */    private Timestamp timeTimestamp;    /**     * long类型的时间     * */    private long timeLong;}
/** * @author hetiantian * @date 2018/10/21 * */@Mapperpublic interface UsersMapper {    @Insert("insert into users(time_date, time_timestamp, time_long) value(#{timeDate}, #{timeTimestamp}, #{timeLong})")    @Options(useGeneratedKeys = true,keyProperty = "id",keyColumn = "id")    int saveUsers(Users users);}
public class UsersMapperTest extends BaseTest {    @Resource    private UsersMapper usersMapper;    @Test    public void test() {        for (int i = 0; i < 500000; i++) {            long time = System.currentTimeMillis();            usersMapper.saveUsers(Users.builder().timeDate(new Date(time)).timeLong(time).timeTimestamp(new Timestamp(time)).build());        }    }}

# sql查询速率测试

通过datetime类型查询:

select count(*) from users where time_date >="2018-10-21 23:32:44" and time_date <="2018-10-21 23:41:22"

通过timestamp类型查询

select count(*) from users where time_timestamp >= "2018-10-21 23:32:44" and time_timestamp <="2018-10-21 23:41:22"

通过bigint类型查询

select count(*) from users where time_long >=1540135964091 and time_long <=1540136482372

结论 在InnoDB存储引擎下,通过时间范围查找,性能bigint > datetime > timestamp

# sql分组速率测试


使用bigint 进行分组会每条数据进行一个分组,如果将bigint做一个转化在去分组就没有比较的意义了,转化也是需要时间的

通过datetime类型分组:

select time_date, count(*) from users group by time_date

通过timestamp类型分组:

select time_timestamp, count(*) from users group by time_timestamp

结论 在InnoDB存储引擎下,通过时间分组,性能timestamp > datetime,但是相差不大

# sql排序速率测试

通过datetime类型排序:

select * from users order by time_date

通过timestamp类型排序

select * from users order by time_timestamp

通过bigint类型排序

select * from users order by time_long

结论:在InnoDB存储引擎下,通过时间排序,性能bigint > timestamp > datetime

# 小结

如果需要对时间字段进行操作(如通过时间范围查找或者排序等),推荐使用bigint,如果时间字段不需要进行任何操作,推荐使用timestamp,使用4个字节保存比较节省空间,但是只能记录到2038年记录的时间有限。

文中sql文件网盘地址: 链接: https://pan.baidu.com/s/1cCRCxtTlPriXMERGsbnb_A 提取码: hbq2

更多相关文章

  1. 修改android系统和watchdog的延时
  2. Android(安卓)Calendar使用过程中遇到的问题
  3. Android执行shell命令
  4. Android中的AlarmManager的使用
  5. android获得系统时间(Handler)
  6. Android简易闹钟实现
  7. Android(安卓)时间滚轴
  8. [置顶] android 捕捉异常
  9. Android:HttpURLConnection使用,Tomcat的Servlet

随机推荐

  1. Jquery无刷新编辑——简单篇
  2. php 从指定数字中获取随机组合的方法
  3. json_decode无法在php中运行
  4. 来自多个文件的相同元素DomDocument load
  5. 获取最近7天的一周中的哪一天?
  6. CakePHP2 Request请求对象中文教程
  7. 关于一个单例模式的问题,这样写为什么返回
  8. 使用date_default_timezone_set和日期的
  9. PHP字节单位转换
  10. 怎么知道php代码运行时调用了那个类、那