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 explode()函数用法、切分字符串
Oct 03 PHP
浅析linux下apache服务器的配置和管理
Aug 10 PHP
destoon公司主页模板风格的添加方法
Jun 20 PHP
PHP使用Session遇到的一个Permission denied Notice解决办法
Jul 30 PHP
php将字符串转换成16进制的方法
Mar 17 PHP
php实现在服务器端调整图片大小的方法
Jun 16 PHP
表单提交错误后返回内容消失问题的解决方法(PHP网站)
Oct 20 PHP
thinkPHP+PHPExcel实现读取文件日期的方法(含时分秒)
Jul 07 PHP
PHP接收App端发送文件流的方法
Sep 23 PHP
phpMyAdmin无法登陆的解决方法
Apr 27 PHP
PHP数组内存利用率低和弱类型详细解读
Aug 10 PHP
设定php简写功能的方法
Nov 28 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
SONY ICF-SW7600的电路分析
2021/03/02 无线电
PHP使用静态方法的几个注意事项
2014/09/16 PHP
ThinkPHP中Common/common.php文件常用函数功能分析
2016/05/20 PHP
PHP实现对二维数组某个键排序的方法
2016/09/14 PHP
PHP递归统计系统中代码行数
2019/09/19 PHP
PHP安全之register_globals的on和off的区别
2020/07/23 PHP
特殊字符、常规符号及其代码对照表
2006/06/26 Javascript
css把超出的部分显示为省略号的方法兼容火狐
2008/07/23 Javascript
$.getJSON在IE下失效的原因分析及解决方法
2013/06/16 Javascript
纯javascript实现的小游戏《Flappy Pig》实例
2015/07/27 Javascript
基于jQuery Circlr插件实现产品图片360度旋转
2015/09/20 Javascript
关于获取DIV内部内容报错的原因分析及解决办法
2016/01/29 Javascript
react.js 翻页插件实例代码
2017/01/19 Javascript
JavaScript数据结构之二叉查找树的定义与表示方法
2017/04/12 Javascript
Vue组件实现触底判断
2019/06/26 Javascript
el-input 标签中密码的显示和隐藏功能的实例代码
2019/07/19 Javascript
浅谈vue中组件绑定事件时是否加.native
2019/11/09 Javascript
[44:40]Spirit vs Navi Supermajor小组赛 A组败者组第一轮 BO3 第一场 6.2
2018/06/03 DOTA
[09:13]DOTA2-DPC中国联赛 正赛 Ehome vs Magma 选手采访 1月19日
2021/03/11 DOTA
Python数据结构之顺序表的实现代码示例
2017/11/15 Python
Python多重继承的方法解析执行顺序实例分析
2018/05/26 Python
使用python对文件中的单词进行提取的方法示例
2018/12/21 Python
解决pyinstaller打包pyqt5的问题
2019/01/08 Python
Python对接六大主流数据库(只需三步)
2019/07/31 Python
在Keras中利用np.random.shuffle()打乱数据集实例
2020/06/15 Python
Python 多进程、多线程效率对比
2020/11/19 Python
西班牙香水和化妆品网上商店:Douglas
2017/10/29 全球购物
锐步美国官方网站:Reebok美国
2018/01/10 全球购物
PatPat香港:婴童服饰和亲子全家装在线购物
2020/09/27 全球购物
SQL Server数据库笔试题和答案
2016/02/04 面试题
白酒市场营销方案
2014/02/25 职场文书
审计专业自荐信范文
2014/04/21 职场文书
学雷锋活动总结范文
2014/04/25 职场文书
领导班子在批评与自我批评座谈会上的发言
2014/09/28 职场文书
保管员岗位职责
2015/02/14 职场文书
vue数据字典取键值项目的字典问题
2022/04/12 Vue.js