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中实现图片的锐化
Oct 09 PHP
php算开始时间到过期时间的相隔的天数
Jan 12 PHP
php 数组的指针操作实现代码
Feb 08 PHP
提高define性能的php扩展hidef的安装和使用
Jun 14 PHP
PHP数据集构建JSON格式及新数组的方法
Nov 07 PHP
PHP swfupload图片上传的实例代码
Sep 30 PHP
php的array数组和使用实例简明教程(容易理解)
Mar 20 PHP
PHP邮件发送类PHPMailer用法实例详解
Sep 22 PHP
php中mysql连接方式PDO使用详解
Feb 25 PHP
php生成zip文件类实例
Apr 07 PHP
在CentOS系统上从零开始搭建WordPress博客的全流程记录
Apr 21 PHP
Smarty模板引擎缓存机制详解
May 23 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扩展介绍与开发教程
2010/08/19 PHP
file_get_contents获取不到网页内容的解决方法
2013/03/07 PHP
php使用fsockopen函数发送post,get请求获取网页内容的方法
2014/11/15 PHP
php递归删除目录与文件的方法
2015/01/30 PHP
jquery.boxy插件的iframe扩展代码
2010/07/02 Javascript
引用外部js乱码问题分析及解决方案
2013/04/12 Javascript
表单序列化与jq中的serialize使用示例
2014/02/21 Javascript
关于JavaScript中name的意义冲突示例介绍
2014/05/29 Javascript
js跨域问题浅析及解决方法优缺点对比
2014/11/08 Javascript
Vue中如何实现轮播图的示例代码
2017/07/27 Javascript
BootStrap Fileinput上传插件使用实例代码
2017/07/28 Javascript
详解Vue-axios 设置请求头问题
2018/12/06 Javascript
详解vue 不同环境配置不同的打包命令
2019/04/07 Javascript
如何从头实现一个node.js的koa框架
2019/06/17 Javascript
vue设置一开始进入的页面教程
2019/10/28 Javascript
vuex实现像调用模板方法一样调用Mutations方法
2019/11/06 Javascript
详解Node.JS模块 process
2020/08/31 Javascript
[02:05]2014DOTA2西雅图国际邀请赛 BBC第二天小组赛总结
2014/07/11 DOTA
在Python中使用matplotlib模块绘制数据图的示例
2015/05/04 Python
Python实现字典依据value排序
2016/02/24 Python
详解Python logging调用Logger.info方法的处理过程
2019/02/12 Python
python异步实现定时任务和周期任务的方法
2019/06/29 Python
python 基于dlib库的人脸检测的实现
2019/11/08 Python
python软件测试Jmeter性能测试JDBC Request(结合数据库)的使用详解
2021/01/26 Python
CSS3+font字体文件实现圆形半透明菜单具体步骤(图解)
2013/06/03 HTML / CSS
HTML5 3D衣服摇摆动画特效
2016/03/17 HTML / CSS
Ralph Lauren拉夫·劳伦美国官网:带有浓郁美国气息的高品味时装品牌
2017/11/01 全球购物
应届生体育教师自荐信
2013/10/03 职场文书
联谊活动策划书
2014/01/26 职场文书
升旗仪式主持词
2014/03/19 职场文书
关于青春的演讲稿三分钟
2014/08/22 职场文书
2016年党员干部公开承诺书
2016/03/24 职场文书
生鲜超市—未来中国最具有潜力零售业态
2019/08/02 职场文书
python爬取企查查企业信息之selenium自动模拟登录企查查
2021/04/08 Python
Python3中PyQt5简单实现文件打开及保存
2021/06/10 Python
Python常用配置文件ini、json、yaml读写总结
2021/07/09 Python