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 相关文章推荐
mysq GBKl乱码
Nov 28 PHP
粗略计算在线时间,bug:ip相同
Dec 09 PHP
php下intval()和(int)转换使用与区别
Jul 18 PHP
PHP Session_Regenerate_ID函数双释放内存破坏漏洞
Jan 27 PHP
JSON在PHP中的应用介绍
Sep 08 PHP
CURL状态码列表(详细)
Jun 27 PHP
解析zend Framework如何自动加载类
Jun 28 PHP
php简单操作mysql数据库的类
Apr 16 PHP
php实现将上传word文件转为html的方法
Jun 03 PHP
PHP数组函数知识汇总
May 12 PHP
laravel5使用freetds连接sql server的方法
Dec 07 PHP
PHP调用接口API封装的例子
Oct 11 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
simplehtmldom Doc api帮助文档
2012/03/26 PHP
PHP中empty,isset,is_null用法和区别
2017/02/19 PHP
PHP十六进制颜色随机生成器功能示例
2017/07/24 PHP
php微信公众号开发之答题连闯三关
2018/10/20 PHP
PHP连续签到功能实现方法详解
2019/12/04 PHP
CI框架简单分页类用法示例
2020/06/06 PHP
JavaScript面向对象(极简主义法minimalist approach)
2012/07/17 Javascript
探讨js字符串数组拼接的性能问题
2014/10/11 Javascript
JavaScript中的原型链prototype介绍
2014/12/30 Javascript
详解JavaScript ES6中的Generator
2015/07/28 Javascript
JS 实现倒计时数字时钟效果【附实例代码】
2016/03/30 Javascript
javascript中利用柯里化函数实现bind方法【推荐】
2016/04/29 Javascript
微信小程序 小程序制作及动画(animation样式)详解
2017/01/06 Javascript
安装vue-cli报错 -4058 的解决方法
2017/10/19 Javascript
jQuery实现动态生成年月日级联下拉列表示例
2019/05/11 jQuery
[14:51]DOTA2 HEROS教学视频教你分分钟做大人-卓尔游侠
2014/06/13 DOTA
[01:11:37]完美世界DOTA2联赛PWL S2 SZ vs FTD.C 第一场 11.19
2020/11/19 DOTA
python递归删除指定目录及其所有内容的方法
2017/01/13 Python
python:pandas合并csv文件的方法(图书数据集成)
2018/04/12 Python
Python读取本地文件并解析网页元素的方法
2018/05/21 Python
python pygame模块编写飞机大战
2018/11/20 Python
Python编程flask使用页面模版的方法
2018/12/28 Python
python3实现小球转动抽奖小游戏
2020/04/15 Python
Python 离线工作环境搭建的方法步骤
2019/07/29 Python
python面向对象 反射原理解析
2019/08/12 Python
wxpython绘制音频效果
2019/11/18 Python
python3 xpath和requests应用详解
2020/03/06 Python
Django多数据库联用实现方法解析
2020/11/12 Python
Pycharm中使用git进行合作开发的教程详解
2020/11/17 Python
python 实现aes256加密
2020/11/27 Python
css3一款3D字体带阴影效果的实现步骤
2013/03/20 HTML / CSS
高三毕业典礼主持词
2014/03/27 职场文书
跳蚤市场口号
2014/06/13 职场文书
商业用房租赁协议书
2014/10/13 职场文书
2014年小学数学工作总结
2014/12/12 职场文书
创业方案:赚钱的烧烤店该怎样做?
2019/07/05 职场文书