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
Dec 23 PHP
增加反向链接的101个方法 站长推荐
Jan 31 PHP
php 删除数组元素
Jan 16 PHP
PHP正确解析UTF-8字符串技巧应用
Nov 07 PHP
linux下编译安装memcached服务
Aug 03 PHP
php使用ob_start()实现图片存入变量的方法
Nov 14 PHP
php $_SESSION会员登录实例分享
Jan 19 PHP
PHP使用栈解决约瑟夫环问题算法示例
Aug 27 PHP
php基于环形链表解决约瑟夫环问题示例
Nov 07 PHP
ThinkPHP like模糊查询,like多匹配查询,between查询,in查询,一般查询书写方法
Sep 26 PHP
Thinkphp 框架扩展之Widget扩展实现方法分析
Apr 23 PHP
PHP autoload使用方法及步骤详解
Sep 05 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检测用户是否用手机(Mobile)访问网站的类
2014/01/09 PHP
PHP使用逆波兰式计算工资的方法
2015/07/29 PHP
PHP使用pdo实现事务处理操作示例
2018/09/05 PHP
linux mint下安装phpstorm2020包括JDK部分的教程详解
2020/09/17 PHP
Javascript String.replace的妙用
2009/09/08 Javascript
jQuery asp.net 用json格式返回自定义对象
2010/04/07 Javascript
jquery 动态创建元素的方式介绍及应用
2013/04/21 Javascript
输入自动提示搜索提示功能的使用说明:sugggestion.txt
2013/09/02 Javascript
js实现连个数字相加而不是拼接的方法
2014/02/23 Javascript
JavaScript bold方法入门实例(把指定文字显示为粗体)
2014/10/17 Javascript
javascript鼠标滑过显示二级菜单特效
2020/11/18 Javascript
AngularJS入门教程之静态模板详解
2016/08/18 Javascript
纯js代码生成可搜索选择下拉列表的实例
2018/01/11 Javascript
webpack+react+antd脚手架优化的方法
2018/04/02 Javascript
vue中keep-alive内置组件缓存的实例代码
2020/04/16 Javascript
vue项目启动出现cannot GET /服务错误的解决方法
2020/04/26 Javascript
ant-design-vue中tree增删改的操作方法
2020/11/03 Javascript
[02:08]DOTA2英雄基础教程 马格纳斯
2014/01/17 DOTA
python 算法 排序实现快速排序
2012/06/05 Python
用Python实现一个简单的能够发送带附件的邮件程序的教程
2015/04/08 Python
python编码总结(编码类型、格式、转码)
2016/07/01 Python
Windows系统下PhantomJS的安装和基本用法
2018/10/21 Python
Python操作MySQL数据库的两种方式实例分析【pymysql和pandas】
2019/03/18 Python
Python3.6实现带有简单界面的有道翻译小程序
2019/04/16 Python
Python操作qml对象过程详解
2019/09/26 Python
python编写微信公众号首图思路详解
2019/12/13 Python
python由已知数组快速生成新数组的方法
2020/04/08 Python
Python使用grequests并发发送请求的示例
2020/11/05 Python
CSS3实现任意图片lowpoly动画效果实例
2017/05/11 HTML / CSS
一款纯css3实现简单的checkbox复选框和radio单选框
2014/11/05 HTML / CSS
HTML5进度条特效
2014/12/18 HTML / CSS
深入探究HTML5的History API
2015/07/09 HTML / CSS
专科毕业生求职简历的自我评价
2013/10/12 职场文书
民主评议党员自我鉴定
2014/10/21 职场文书
四风之害观后感
2015/06/09 职场文书
德生BCL3000抢先使用感受和评价
2022/04/07 无线电