`
dcj3sjt126com
  • 浏览: 1871324 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MySQL时间字段究竟使用INT还是DateTime?

阅读更多

 

环境:
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是有意义的。

分享到:
评论

相关推荐

    mysql 自增长 时间字段

    MySQL 提供了多种时间字段类型,包括 DATE、TIME、DATETIME、TIMESTAMP 等。每种类型都有其特点和应用场景。 * `NOW()` 函数:返回当前日期和时间,格式为 `YYYY-MM-DD HH:MM:SS`。例如: ```sql INSERT INTO ...

    MySQL数据表添加字段

    MySQL提供了多种数据类型,如整数类型(INT、TINYINT等)、浮点数类型(FLOAT、DOUBLE等)、字符串类型(VARCHAR、CHAR等)、日期和时间类型(DATE、TIME、DATETIME等)等。选择合适的数据类型可以有效节省存储空间...

    ASP技术常遇问题解答-MYSQL各字段的长度是多少?.zip

    MySQL数据库支持多种数据类型,如数字类型(INT、FLOAT、DECIMAL等)、字符串类型(CHAR、VARCHAR、TEXT等)、日期和时间类型(DATE、TIME、DATETIME等)以及二进制类型(BLOB、BINARY等)。每种数据类型都有其特定...

    MySQL的datetime设置当前时间为默认值[定义].pdf

    MySQL 中的 datetime 类型字段无法使用函数作为默认值,因此无法使用 `create_time datetime default now()` 的形式设置默认值。代替的方案是使用 TIMESTAMP 类型代替 DATETIME 类型。 TIMESTAMP 类型有两个重要的...

    MySQL字段类型列表

    MySQL是世界上最受欢迎的关系型数据库管理系统之一,其字段类型设计得非常灵活,以适应各种数据存储需求。在MySQL中,字段类型决定了数据的存储方式、大小和格式。以下是对MySQL5中常见字段类型的详细说明: 1. **...

    MySQL字段类型说明

    MySQL 是一个功能强大且广泛使用的关系型数据库管理系统,它支持大量的列类型,可以被分为数字类型、日期和时间类型以及字符串(字符)类型。本节对 MySQL 字段类型进行了详细的说明,包括每个列类型的存储需求、...

    MySql所有字段类型及长度范围

    ### MySQL所有字段类型及长度范围详解 在数据库设计与应用开发过程中,选择合适的字段类型对于确保数据的准确存储和高效处理至关重要。MySQL提供了丰富的数据类型,涵盖了数字、字符串、日期时间等多种类别,满足了...

    mysql的字段类型及简单的操作命令

    MySQL 中有多种日期和时间类型,每种类型都有其特点和使用场景。 * Date:一种日期类型,格式为 YYYYMMDD,用于存储日期信息。 * Time:一种时间类型,格式为 HH:MM:SS,用于存储时间信息。 * DateTime:一种日期和...

    MySql性能调优(一)字段类型的选取之时间类型

    MySql性能调优(一)字段类型的选取之时间类型 在 MySQL 中,选择合适的字段类型对数据库的性能和数据存储效率具有重要影响。在本文中,我们将讨论 MySQL 中的时间类型,包括 DATE、TIME、DATETIME、TIMESTAMP 和 ...

    mysql添加字段.docx

    MySQL提供了多种数据类型,如整型(INT、TINYINT等)、浮点型(FLOAT、DOUBLE等)、字符串型(VARCHAR、CHAR等)、日期时间型(DATE、TIME、DATETIME等)以及二进制型(BLOB、VARBINARY等)。选择合适的数据类型非常...

    MySQL中你应该使用什么数据类型表示时间.docx

    本文将讨论 MySQL 中原生的 DATE 类型和 INT 类型的比较,介绍 Datetime 和 Timestamp 两种原生类型,并讨论使用 INT 字段保存 Unix 时间的方法。 Datetime 数据类型 Datetime 数据类型用于保存同时包含日期和时间...

    MySQL数据库:表的字段类型.pptx

    数据库和表的创建与管理 表的字段类型 ...表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。 每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使

    在mysql建表中将日期设置为默认取得当前系统时间

    此外,如果字段类型为`TIMESTAMP`而非`DATETIME`,则可以使用此特性。对于`DATETIME`类型,需寻找其他方法来实现类似功能,如在应用程序层面处理或使用触发器。 ### 4. 精确度与存储格式 `TIMESTAMP`类型支持的...

    mysql中datetime类型设置默认值方法

    在MySQL数据库中,datetime类型常用于存储日期和时间的组合数据,如事件的发生时间或记录的创建、修改时间。在设计数据库表结构时,有时我们需要为datetime类型的字段设置默认值,以便在插入新记录时自动填充当前的...

    MySql字段类型

    MySQL字段类型是数据库设计的基础,它决定了数据存储的格式和方式。MySQL支持多种数据类型,主要分为数值型、字符型、日期和时间型以及NULL值。 1. 数值型: - 整数类型:包括TINYINT、SMALLINT、MEDIUMINT、INT和...

    Mysql字段类型说明

    MySQL是一种广泛使用的开源关系型数据库管理系统,其字段类型是数据库设计中的重要概念,它决定了数据存储的格式和特性。理解并正确选择字段类型对于优化数据库性能、节省存储空间以及确保数据准确性至关重要。以下...

    关于MySQL 时间类型 datetime、bigint、timestamp,你用哪个?

    ### MySQL时间类型详解:datetime、bigint、timestamp 在MySQL中,根据不同的应用场景和需求,可以选择多种方式来存储日期和时间信息。本篇文章将详细介绍三种常用的时间类型:`datetime`、`bigint` 和 `timestamp`...

    mysql建表字段,相关内容 MySQL学习练习

    MySQL支持多种数据类型,包括整数类型(如TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT)、浮点数类型(如FLOAT、DOUBLE)、字符串类型(如VARCHAR、CHAR、TEXT)、日期和时间类型(如DATE、TIME、DATETIME、...

    获取数据库中两个时间字段的相差天数及ABS/DATEDIFF函数应用

    代码如下:SELECT ABS(DATEDIFF(dd,... 您可能感兴趣的文章:MySQL时间字段究竟使用INT还是DateTime的说明JavaScript自定义DateDiff函数(兼容所有浏览器)JavaScript版DateAdd和DateDiff函数代码asp DateDiff实现文字

Global site tag (gtag.js) - Google Analytics