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实现多服务器session共享之NFS共享的方法
Mar 16 PHP
PHP UTF8编码内的繁简转换类
Jul 20 PHP
php抓取页面与代码解析 推荐
Jul 23 PHP
强烈声明: 不要使用(include/require)_once
Jun 06 PHP
thinkphp实现多语言功能(语言包)
Mar 04 PHP
PHP调用VC编写的COM组件实例
Mar 29 PHP
destoon设置自定义搜索的方法
Jun 21 PHP
PHP采用超长(超大)数字运算防止数字以科学计数法显示的方法
Apr 01 PHP
php的debug相关函数用法示例
Jul 11 PHP
ThinkPHP中图片按比例切割的代码实例
Mar 08 PHP
php模式设计之观察者模式应用实例分析
Sep 25 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设计模式 DAO(数据访问对象模式)
2011/06/26 PHP
PHP8.0新功能之Match表达式的使用
2020/07/19 PHP
JQuery 构建客户/服务分离的链接模型中Table分页代码效率初探
2010/01/22 Javascript
jquery 打开窗口返回值实现代码
2010/03/04 Javascript
Jsonp 跨域的原理以及Jquery的解决方案
2010/05/18 Javascript
jQuery获取Radio,CheckBox选择的Value值(示例代码)
2013/12/12 Javascript
jquery复选框全选/取消示例
2013/12/30 Javascript
jQuery 删除/替换DOM元素的几种方式
2014/05/20 Javascript
简介JavaScript中的unshift()方法的使用
2015/06/09 Javascript
使用基于Node.js的构建工具Grunt来发布ASP.NET MVC项目
2016/02/15 Javascript
jQuery DataTables插件自定义Ajax分页实例解析
2020/04/28 Javascript
AngularJS基础 ng-click 指令示例代码
2016/08/01 Javascript
利用jQuery对无序列表排序的简单方法
2016/10/16 Javascript
easyui导出excel无法弹出下载框的快速解决方法
2016/11/10 Javascript
简述Angular 5 快速入门
2017/11/04 Javascript
JS学习笔记之闭包小案例分析
2019/05/29 Javascript
react实现移动端下拉菜单的示例代码
2020/01/16 Javascript
[03:10]超级美酒第四天 fy拉比克秀 大合集
2018/06/05 DOTA
python中urllib模块用法实例详解
2014/11/19 Python
Python中super关键字用法实例分析
2015/05/28 Python
Python中的zipfile模块使用详解
2015/06/25 Python
Python iter()函数用法实例分析
2018/03/17 Python
python读取csv文件并把文件放入一个list中的实例讲解
2018/04/27 Python
python实现用户名密码校验
2020/03/18 Python
python制作抽奖程序代码详解
2021/01/15 Python
优质飞蝇钓和渔具:RiverBum
2020/05/10 全球购物
装修五一活动策划案
2014/01/23 职场文书
乔迁之喜主持词
2014/03/27 职场文书
机电一体化专业求职信
2014/07/22 职场文书
2014教师教育实践活动对照检查材料思想汇报
2014/09/21 职场文书
党的群众路线剖析材料
2014/10/09 职场文书
2015年主婚人婚礼致辞
2015/07/28 职场文书
导游词之贵州百里杜鹃
2019/10/29 职场文书
python编写五子棋游戏
2021/05/25 Python
pycharm部署django项目到云服务器的详细流程
2021/06/29 Python
Spring Boot配合PageHelper优化大表查询数据分页
2022/04/20 Java/Android