首页 > 其他 > 详细

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

时间:2015-10-19 17:39:10      阅读:252      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!