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之第八天
Oct 09 PHP
php allow_url_include的应用和解释
Apr 22 PHP
PHP 开发环境配置(Zend Studio)
Apr 28 PHP
PHP zip扩展Linux下安装过程分享
May 05 PHP
php使用CURL伪造IP和来源实例详解
Jan 15 PHP
PHP解析RSS的方法
Mar 05 PHP
PHP计算指定日期所在周的开始和结束日期的方法
Mar 24 PHP
详解PHP安装mysql.so扩展的方法
Dec 31 PHP
php日志函数error_log用法实例分析
Sep 23 PHP
PHP代码加密的方法总结
Mar 13 PHP
PHP如何通过date() 函数格式化显示时间
Nov 13 PHP
深入解析PHP底层机制及相关原理
Dec 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
PHP3 safe_mode 失效漏洞
2006/10/09 PHP
从康盛产品(discuz)提取出来的模板类
2011/06/28 PHP
PHP获取数组中重复最多的元素的实现方法
2014/11/11 PHP
PHP实现动态柱状图改进版
2015/03/30 PHP
在Mac OS的PHP环境下安装配置MemCache的全过程解析
2016/02/15 PHP
thinkPHP+phpexcel实现excel报表输出功能示例
2017/06/06 PHP
用CSS+JS实现的进度条效果效果
2007/06/05 Javascript
js同时按下两个方向键
2007/12/01 Javascript
JavaScript高级程序设计 读书笔记之九 本地对象Array
2012/02/27 Javascript
JavaScript 基础篇之对象、数组使用介绍(三)
2012/04/07 Javascript
js特效,页面下雪的小例子
2013/06/17 Javascript
javascript简单事件处理和with用法介绍
2013/09/16 Javascript
jQuery实现输入框下拉列表树插件特效代码分享
2015/08/27 Javascript
使用JavaScript脚本判断页面是否在微信中被打开
2016/03/06 Javascript
AngularJS基础 ng-if 指令用法
2016/08/01 Javascript
最原始的jQuery注册验证方式
2016/10/11 Javascript
Vue v2.4中新增的$attrs及$listeners属性使用教程
2018/01/08 Javascript
浅谈Webpack 持久化缓存实践
2018/03/22 Javascript
Vue Router的懒加载路径的解决方法
2018/06/21 Javascript
angular 用Observable实现异步调用的方法
2018/12/27 Javascript
Angular6新特性之Angular Material
2018/12/28 Javascript
mpvue微信小程序的接口请求fly全局拦截代码实例
2019/11/13 Javascript
[02:16]深扒TI7聊天轮盘语音出处2
2017/05/11 DOTA
Python中几个比较常见的名词解释
2015/07/04 Python
Python中列表、字典、元组数据结构的简单学习笔记
2016/03/20 Python
详解Ubuntu环境下部署Django+uwsgi+nginx总结
2020/04/02 Python
Revolution Beauty美国官网:英国知名化妆品网站
2018/07/23 全球购物
捷克家电和家具购物网站:OKAY.cz
2020/07/23 全球购物
介绍一下linux的文件系统
2012/03/20 面试题
小学教师岗位职责
2013/11/25 职场文书
表彰先进的通报
2014/01/31 职场文书
2014政府领导班子对照检查材料思想汇报(3篇)
2014/09/26 职场文书
大学生党员个人总结
2015/02/13 职场文书
2016年禁毒宣传活动总结
2016/04/05 职场文书
2019辞职报告范本3篇!
2019/07/23 职场文书
Consul在linux环境的集群部署
2022/04/08 Servers