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开发工具之vs2005图解
Jan 12 PHP
php 随机数的产生、页面跳转、件读写、文件重命名、switch语句
Aug 07 PHP
使用php来实现网络服务
Sep 15 PHP
PHP遍历二维数组的代码
Apr 22 PHP
多个PHP中文字符串截取函数
Nov 12 PHP
PHP利用APC模块实现文件上传进度条的方法
Jan 26 PHP
PHP+Ajax+JS实现多图上传
May 07 PHP
PHP  实现等比压缩图片尺寸和大小实例代码
Oct 08 PHP
thinkphp分页实现效果
Oct 13 PHP
php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】
Dec 07 PHP
Yii2中简单的场景使用介绍
Jun 02 PHP
使用PHPStorm+XDebug搭建单步调试环境
Nov 19 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生成网站桌面快捷方式代码分享
2014/10/11 PHP
PHP实现唤起微信支付功能
2019/02/18 PHP
JavaScript入门教程(2) JS基础知识
2009/01/31 Javascript
ajax请求get与post的区别总结
2013/11/04 Javascript
jquery通过load获取文件的内容并跳到锚点的方法
2015/01/29 Javascript
JavaScript生成随机数的4种自定义函数分享
2015/02/28 Javascript
js显示文本框提示文字的方法
2015/05/07 Javascript
分享javascript计算时间差的示例代码
2020/03/19 Javascript
js实现移动端微信页面禁止字体放大
2017/02/16 Javascript
JS操作xml对象转换为Json对象示例
2017/03/25 Javascript
详解Vue.js 2.0 如何使用axios
2017/04/21 Javascript
js学习总结之DOM2兼容处理重复问题的解决方法
2017/07/27 Javascript
浅谈vue项目可以从哪些方面进行优化
2018/05/05 Javascript
解决Vue中引入swiper,在数据渲染的时候,发生不滑动的问题
2018/09/27 Javascript
Vue实现固定定位图标滑动隐藏效果
2019/05/30 Javascript
webpack4.0+vue2.0利用批处理生成前端单页或多页应用的方法
2019/06/28 Javascript
vue2.0+SVG实现音乐播放圆形进度条组件
2019/09/21 Javascript
解决vue项目router切换太慢问题
2020/07/19 Javascript
javascript this指向相关问题及改变方法
2020/11/19 Javascript
python处理json数据中的中文
2014/03/06 Python
Python爬虫利用cookie实现模拟登陆实例详解
2017/01/12 Python
浅谈python中的占位符
2017/11/09 Python
Django基础知识 web框架的本质详解
2019/07/18 Python
numpy.transpose()实现数组的转置例子
2019/12/02 Python
使用pygame编写Flappy bird小游戏
2020/03/14 Python
使用HTML5捕捉音频与视频信息概述及实例
2018/08/22 HTML / CSS
模具设计与制造专业应届生求职信
2013/10/18 职场文书
幼儿园门卫岗位职责
2014/02/14 职场文书
服装设计专业毕业生求职信
2014/04/09 职场文书
入党推优材料
2014/06/02 职场文书
化工专业自荐书
2014/06/16 职场文书
2014全年工作总结
2014/11/27 职场文书
2015年医院工作总结范文
2015/04/09 职场文书
2015年党务公开工作总结
2015/05/19 职场文书
十二生肖观后感
2015/06/12 职场文书
SpringBoot项目多数据源及mybatis 驼峰失效的问题解决方法
2022/07/07 Java/Android