MySQL时间字段究竟使用INT还是DateTime的说明


Posted in PHP onFebruary 27, 2012

今天解析DEDECMS时发现deder的MYSQL时间字段,都是用

`senddata` int(10) unsigned NOT NULL DEFAULT '0';

随后又在网上找到这篇文章,看来如果时间字段有参与运算,用int更好,一来检索时不用在字段上转换运算,直接用于时间比较!二来如下所述效率也更高。

归根结底:用int来代替data类型,更高效。

环境:

Windows XP PHP Version 5.2.9 MySQL Server 5.1

第一步、创建一个表date_test(非定长、int时间)

CREATE TABLE `test`.`date_test` ( `id` INT NOT NULL AUTO_INCREMENT , `start_time` INT NOT NULL , `some_content` VARCHAR( 255 ) NOT NULL , PRIMARY KEY ( `id` ) ) ENGINE = InnoDB;

第二步、创建第二个表date_test2(定长、int时间)

CREATE TABLE `test`.`date_test2` ( `id` INT NOT NULL AUTO_INCREMENT , `start_time` INT NOT NULL , `some_content` CHAR( 255 ) NOT NULL , PRIMARY KEY ( `id` ) ) ENGINE = InnoDB;

第三步、创建第三个表date_test3(varchar、datetime时间)

CREATE TABLE `test`.`date_test3` ( `id` INT NOT NULL AUTO_INCREMENT , `start_time` DATETIME NOT NULL , `some_content` VARCHAR( 255 ) NOT NULL , PRIMARY KEY ( `id` ) ) ENGINE = InnoDB;

第四步、创建第四个表date_test3(char、datetime时间)

CREATE TABLE `test`.`date_test4` ( `id` INT NOT NULL AUTO_INCREMENT , `start_time` DATETIME NOT NULL , `some_content` CHAR( 255 ) NOT NULL , PRIMARY KEY ( `id` ) ) ENGINE = InnoDB;

ok,现在我们开始做测试,环境是php,先向各个表插入一百万条数据。插入的时候分200次,每次进库5000条。

表一执行记录:页面运行时间: 26.5997889042 秒,插入的时候发现一个有趣的现象:SELECT count( id ) FROM `date_test` WHERE 1 的结果是100w,而直接select * from `date_test`却是1,000,374条结果。(后来看到这是一个可能接近的值,请参看MySQL FAQ 3.11)。

表二执行记录:页面运行时间: 62.3908278942 秒,这次记录是1,000,066条。

表三执行记录:页面运行时间: 30.2576560974 秒,这次的是1,000,224条。

表四执行记录:页面运行时间: 67.5393900871 秒,这次的是:1,000,073条。

现在把四个表的start_time字段一一加上索引。

测试四个表的更新,分别update 100条记录,并记录时间:

表一:页面运行时间: 2.62180089951 秒(非定长,int时间)

表二:页面运行时间: 2.5475358963 秒(定长,int时间)

表三:页面运行时间: 2.45077300072 秒(varchar,datetime时间)

表四:页面运行时间: 2.82798409462 秒(char,datetime时间)

测试四个表的读取,分别select 100条随机记录,以主键id为条件查询,并记录时间:

表一:页面运行时间: 0.382651090622 秒(非定长,int时间)

表二:页面运行时间: 0.542181015015 秒(定长,int时间)

表三:页面运行时间: 0.334048032761 秒(varchar,datetime时间)

表四:页面运行时间: 0.506206989288 秒(char,datetime时间)

测试四个表的读取,分别select 10条随机记录,以star_time为条件查询,并记录时间:

表一:页面运行时间: 30.1972880363 秒(非定长,int时间)

表二:页面运行时间: 65.1926910877 秒(定长,int时间)

表三:页面运行时间: 39.7210869789 秒(varchar,datetime时间)

表四:页面运行时间: 70.4632740021 秒(char,datetime时间)

因为量比较小,所以我们默认即使是微小的变化,也是有意义的。

结论:

大数据量下,如果存在大量的select * from table where 时间>XX这样的查询,在MySQL5.1时使用int换datetime是有意义的。

PHP 相关文章推荐
让PHP支持页面回退的两种方法[转]
Feb 14 PHP
php在文件指定行中写入代码的方法
May 23 PHP
解析PHP实现多进程并行执行脚本
Jun 18 PHP
PHP生成图片验证码、点击切换实例
Jun 25 PHP
9条PHP编程小知识及易犯的小错误
Jan 22 PHP
php将日期格式转换成xx天前的格式
Apr 16 PHP
PHP读取PPT文件的方法
Dec 10 PHP
php模板引擎技术简单实现
Mar 15 PHP
Yii2压缩PHP中模板代码的输出问题
Aug 28 PHP
PHP的mysqli_sqlstate()函数讲解
Jan 23 PHP
PDO::inTransaction讲解
Jan 28 PHP
Laravel 框架基于自带的用户系统实现登录注册及错误处理功能分析
Apr 14 PHP
php explode函数实例代码
Feb 27 #PHP
PHP中获取文件扩展名的N种方法小结
Feb 27 #PHP
PHP中的正则表达式函数介绍
Feb 27 #PHP
支持中文字母数字、自定义字体php验证码代码
Feb 27 #PHP
一些需要禁用的PHP危险函数(disable_functions)
Feb 23 #PHP
PHP面向对象法则
Feb 23 #PHP
优化PHP程序的方法小结
Feb 23 #PHP
You might like
深入解析PHP中SESSION反序列化机制
2017/03/01 PHP
php封装json通信接口详解及实例
2017/03/07 PHP
PHP进阶学习之反射基本概念与用法分析
2019/06/18 PHP
Aster vs Newbee BO3 第二场2.18
2021/03/10 DOTA
javascript事件模型代码
2007/07/01 Javascript
Jquery ajax不能解析json对象,报Invalid JSON错误的原因和解决方法
2010/03/27 Javascript
javascript textContent与innerText的异同分析
2010/10/22 Javascript
js获取input标签的输入值实现代码
2013/08/05 Javascript
jqGrid日期格式的判断示例代码(开始日期与结束日期)
2013/11/08 Javascript
jQuery替换字符串(实例代码)
2013/11/13 Javascript
javaScript中两个等于号和三个等于号之间的区别介绍
2014/06/27 Javascript
8个超实用的jQuery功能代码分享
2015/01/08 Javascript
JavaScript实现简单的二级导航菜单实例
2015/04/15 Javascript
简介JavaScript中Math.LOG10E属性的使用
2015/06/14 Javascript
jQuery validate插件submitHandler提交导致死循环解决方法
2016/01/21 Javascript
laydate.js日期时间选择插件
2017/01/04 Javascript
详解Vue中使用v-for语句抛出错误的解决方案
2017/05/04 Javascript
详解关于react-redux中的connect用法介绍及原理解析
2017/09/11 Javascript
微信小程序模板消息限制实现无限制主动推送的示例代码
2019/08/27 Javascript
[03:46]DOTA2英雄基础教程 维萨吉
2013/12/11 DOTA
[00:36]DOTA2上海特级锦标赛 Alliance战队宣传片
2016/03/04 DOTA
python操作CouchDB的方法
2014/10/08 Python
Python3.2中Print函数用法实例详解
2015/05/19 Python
pymssql数据库操作MSSQL2005实例分析
2015/05/25 Python
Python使用multiprocessing创建进程的方法
2015/06/04 Python
python 接口返回的json字符串实例
2018/03/27 Python
python logging重复记录日志问题的解决方法
2018/07/12 Python
Pytorch抽取网络层的Feature Map(Vgg)实例
2019/08/20 Python
css3 flex布局 justify-content:space-between 最后一行左对齐
2020/01/02 HTML / CSS
HTML5验证以及日期显示的实现详解
2013/07/05 HTML / CSS
Hotels.com爱尔兰:全球酒店预订
2017/02/24 全球购物
法国在线药房:DoctiPharma
2020/10/21 全球购物
优秀通讯员事迹材料
2014/01/28 职场文书
高级编程求职信模板
2014/02/16 职场文书
小学语文教学经验交流材料
2014/06/02 职场文书
最新最全的手机号验证正则表达式
2022/02/24 Javascript