码迷,mamicode.com
首页 > 其他好文 > 详细

用TimeStamp 取代 Int 和 DateTime (更新中...)

时间:2015-10-19 17:41:24      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:

强烈参考:http://imysql.com/2008_07_17_timestamp_vs_int_and_datetime

<一>数据准备

1.1 创建表

CREATE TABLE t(
 d1 int(10) unsigned NOT NULL default 0,
 d2 timestamp NOT NULL default CURRENT_TIMESTAMP,
 d3 datetime NOT NULL,
 KEY d2 (d2),
 KEY d1 (d1),
 KEY d3 (d3)
);

1.2 利用procedure 填充数据

 DELIMITER //
 CREATE PROCEDURE INS_T()
  	BEGIN
 		SET @i=1;
  		WHILE 0<1
  		DO
  			SET @i=@i+1;
  			INSERT INTO t VALUES (1199116800+@i, FROM_UNIXTIME(1199116800+@i), FROM_UNIXTIME(1199116800+@i));
  		END WHILE;
  	END;//
 DELIMITER ;

1.3 分析表

show index from t;

结果:

技术分享


<二> 比较

2.1 只检索一条记录

==> 利用 unsigned int

explain select * from t where d1 = 1199579155;

结果

技术分享

==> 利用 timestamp

explain select * from t where d2 = ‘2008-01-06 08:25:55‘;

结果:

技术分享

==> 利用 datetime

explain select * from t where d3 = ‘2008-01-06 08:25:55‘

结果:

技术分享

2.2 范围检索

==> 利用 unsigned int

explain select * from t where d1 >= 1199894400;

结果:

技术分享

==> 利用 timestamp

explain select * from t where d2 >= from_unixtime(1199894400);

结果:

技术分享

==> 利用 datetime

explain select * from t where d3 >= from_unixtime(1199894400);

结果:

技术分享


<三> 分析

3.1 结果分析

从上面的2次对比中可以看到,对 d1 或 d2 字段检索时的索引长度都是 4,而对d3 检索时索引的长度是8.

因为 TIMESTAMP 实际上是 4字节 的 INT 值。因此,实际应用中,基本上完全可以采用 TIMESTAMP 来代替另外2种类型了,并且 TIMESTAMP 还能支持自动更新成当前最新时间,何乐而不为呢?

用TimeStamp 取代 Int 和 DateTime (更新中...)

标签:

原文地址:http://my.oschina.net/pingjiangyetan/blog/518929

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!