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执行linux系统命令的常用函数使用说明
Apr 27 PHP
PHP通过header实现文本文件下载的代码
Aug 08 PHP
使用cookie实现统计访问者登陆次数
Jun 08 PHP
PHP验证码函数代码(简单实用)
Sep 29 PHP
浅析php工厂模式
Nov 25 PHP
js+php实现静态页面实时调用用户登陆状态的方法
Jan 04 PHP
编写PHP程序检查字符串中的中文字符个数的实例分享
Mar 17 PHP
PHP引用的调用方法分析
Apr 25 PHP
WordPress中的shortcode短代码功能使用详解
May 17 PHP
PHP AjaxForm提交图片上传并显示图片源码
Nov 29 PHP
简单实用的PHP文本缓存类实例
Mar 22 PHP
PHP rmdir()函数的用法总结
Jul 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
php 8小时时间差的解决方法小结
2009/12/22 PHP
smarty获得当前url的方法分享
2014/02/14 PHP
php提取身份证号码中的生日日期以及验证是否为成年人的函数
2015/09/29 PHP
php实现的SSO单点登录系统接入功能示例分析
2016/10/12 PHP
PHP框架Laravel中实现supervisor执行异步进程的方法
2017/06/07 PHP
php实现的PDO异常处理操作分析
2018/12/27 PHP
PHP扩展Swoole实现实时异步任务队列示例
2019/04/13 PHP
IE中createElement需要注意的一个问题
2010/07/13 Javascript
javascript 正则表达式相关应介绍
2012/11/27 Javascript
jQuery中removeProp()方法用法实例
2015/01/05 Javascript
javascript中this的四种用法
2015/05/11 Javascript
js console.log打印对像与数组用法详解
2016/01/21 Javascript
JS控制FileUpload的上传文件类型实例代码
2016/10/07 Javascript
初学者AngularJS的环境搭建过程
2017/10/27 Javascript
详解如何在webpack中做预渲染降低首屏空白时间
2018/08/22 Javascript
详解Node.js读写中文内容文件操作
2018/10/10 Javascript
Vue中keep-alive组件作用详解
2020/02/04 Javascript
通过实例解析jQ Ajax操作相关原理
2020/09/23 Javascript
javascript实现左右缓动动画函数
2020/11/25 Javascript
如何封装Vue Element的table表格组件
2021/02/06 Vue.js
[43:03]LGD vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
python实现图片批量剪切示例
2014/03/25 Python
Django使用httpresponse返回用户头像实例代码
2018/01/26 Python
Python工厂函数用法实例分析
2018/05/14 Python
django实现用户注册实例讲解
2019/10/30 Python
python如何提升爬虫效率
2020/09/27 Python
韩国家庭购物网上商店:Nsmall
2017/05/07 全球购物
澳大利亚最受欢迎的美发用品目的地:AMR
2019/08/28 全球购物
2014年小班元旦活动方案
2014/02/16 职场文书
质量保证书范本
2014/04/29 职场文书
小学校长竞聘演讲稿
2014/05/16 职场文书
车贷收入证明范本
2014/09/14 职场文书
金秋助学感谢信
2015/01/21 职场文书
毕业生党员个人总结
2015/02/14 职场文书
MySQL分区以及建索引的方法总结
2022/04/13 MySQL
Vue router配置与使用分析讲解
2022/12/24 Vue.js