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 相关文章推荐
如何做到多笔资料的同步
Oct 09 PHP
PHP 程序员应该使用的10个组件
Oct 31 PHP
php获取当前网址url并替换参数或网址的方法
Jun 06 PHP
Zend的AutoLoad机制介绍
Sep 27 PHP
浅析php header 跳转
Jun 17 PHP
解析如何修改phpmyadmin中的默认登陆超时时间
Jun 25 PHP
php单例模式示例分享
Feb 12 PHP
php生成验证码函数
Oct 20 PHP
微信支付PHP SDK之微信公众号支付代码详解
Dec 09 PHP
php版阿里大于(阿里大鱼)短信发送实例详解
Nov 30 PHP
PHP中关键字interface和implements详解
Jun 14 PHP
为何说PHP引用是个坑,要慎用
Apr 02 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
取得单条网站评论以数组形式进行输出
2014/07/28 PHP
PHP生成随机密码方法汇总
2015/08/27 PHP
php上传图片并压缩的实现方法
2015/12/22 PHP
php获取服务器操作系统相关信息的方法
2016/10/08 PHP
学习thinkphp5.0验证类使用方法
2017/11/16 PHP
php命令行模式代码实例详解
2021/02/26 PHP
Aster vs KG BO3 第三场2.19
2021/03/10 DOTA
在一个js文件里远程调用jquery.js会在ie8下的一个奇怪问题
2010/11/28 Javascript
最佳的addEvent事件绑定是怎样诞生的
2011/10/24 Javascript
jquery实现表格中点击相应行变色功能效果【实例代码】
2016/05/09 Javascript
JavaScript代码实现图片循环滚动效果
2020/03/19 Javascript
AngularJS 执行流程详细介绍
2016/08/18 Javascript
AngularJs ng-route路由详解及实例代码
2016/09/14 Javascript
jquery 抽奖小程序实现代码
2016/10/12 Javascript
js 颜色选择插件
2017/01/23 Javascript
JavaScript事件发布/订阅模式原理与用法分析
2018/08/21 Javascript
Angular2实现的秒表及改良版示例
2019/05/10 Javascript
vue移动端城市三级联动组件使用详解
2019/07/26 Javascript
解决antd的Form组件setFieldsValue的警告问题
2020/10/29 Javascript
python设置windows桌面壁纸的实现代码
2013/01/28 Python
使用Python解析JSON数据的基本方法
2015/10/15 Python
python 调用HBase的简单实例
2016/12/18 Python
利用Python中unittest实现简单的单元测试实例详解
2017/01/09 Python
浅谈机器学习需要的了解的十大算法
2017/12/15 Python
Python实现的字典值比较功能示例
2018/01/08 Python
使用Python抓取豆瓣影评数据的方法
2018/10/17 Python
python实现维吉尼亚算法
2019/03/20 Python
Pyqt5 基本界面组件之inputDialog的使用
2019/06/25 Python
python如何解析复杂sql,实现数据库和表的提取的实例剖析
2020/05/15 Python
Python读取Excel一列并计算所有对象出现次数的方法
2020/09/04 Python
python自动化发送邮件实例讲解
2021/01/04 Python
HTML5和以前HTML4的区别整理
2013/10/20 HTML / CSS
毕业生就业自荐信
2013/12/04 职场文书
自动一体化专业求职信
2014/03/15 职场文书
促销活动总结范文
2014/04/30 职场文书
2015暑假社会调查报告
2015/07/13 职场文书