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批量生成随机用户名
Jul 10 PHP
php实现加减法验证码代码
Feb 14 PHP
php获取网页中图片、DIV内容的简单方法
Jun 19 PHP
php给一组指定关键词添加span标签的方法
Mar 31 PHP
php抓取网站图片并保存的实现方法
Oct 29 PHP
php防止用户重复提交表单
Nov 02 PHP
详解PHP的Yii框架中自带的前端资源包的使用
Mar 31 PHP
thinkphp框架实现删除和批量删除
Jun 29 PHP
PHP flush 函数使用注意事项
Aug 26 PHP
Yii2框架实现数据库常用操作总结
Feb 08 PHP
PHP数组遍历的几种常见方式总结
Feb 15 PHP
php连接sftp的作用以及实例代码
Sep 23 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 正则学习实例
2008/07/30 PHP
mac下使用brew配置环境的步骤分享
2011/05/23 PHP
Drupal7 form表单二次开发要点与实例
2014/03/02 PHP
php计算当前程序执行时间示例
2014/04/24 PHP
php操作mongoDB实例分析
2014/12/29 PHP
Yii2中简单的场景使用介绍
2017/06/02 PHP
php + ajax 实现的写入数据库操作简单示例
2020/05/16 PHP
向大师们学习Javascript(视频与PPT)
2009/12/27 Javascript
jquery的Tooltip插件 qtip使用详细说明
2010/09/08 Javascript
基于jQuery的简单九宫格实现代码
2012/08/09 Javascript
Javascript在IE和FireFox中的不同表现简析
2012/12/03 Javascript
HTML页面滚动时获取离页面顶部的距离2种实现方法
2013/09/05 Javascript
JS动态添加iframe的代码
2015/09/14 Javascript
javascript返回顶部的按钮实现方法
2016/01/09 Javascript
JavaScript模仿Pinterest实现图片预加载功能
2016/10/25 Javascript
vue组件传递对象中实现单向绑定的示例
2018/02/28 Javascript
微信小程序单选radio及多选checkbox按钮用法示例
2019/04/30 Javascript
微信小程序云开发详细教程
2019/05/16 Javascript
详解element-ui设置下拉选择切换必填和非必填
2019/06/17 Javascript
VUE.js实现动态设置输入框disabled属性
2019/10/28 Javascript
js实现类选择器和name属性选择器的示例步骤
2021/02/07 Javascript
使用Python3 编写简单信用卡管理程序
2016/12/21 Python
Python基于SMTP协议实现发送邮件功能详解
2018/08/14 Python
用vue.js组件模拟v-model指令实例方法
2019/07/05 Python
python异常处理try except过程解析
2020/02/03 Python
基于Python快速处理PDF表格数据
2020/06/03 Python
Python中的特殊方法以及应用详解
2020/09/20 Python
HTML5 Canvas的常用线条属性值总结
2016/03/17 HTML / CSS
日本最大的购物网站乐天市场国际版:Rakuten Global Market(支持中文)
2020/02/03 全球购物
党委班子对照检查材料
2014/08/19 职场文书
护士求职简历自我评价
2015/03/10 职场文书
企业工会工作总结2015
2015/05/13 职场文书
高中政治教学反思
2016/02/23 职场文书
开网店计划分析
2019/07/30 职场文书
选对餐饮营销策略,营业额才会上涨
2019/08/27 职场文书
Mybatis-plus在项目中的简单应用
2021/07/01 Java/Android