首先,我要说的是,我已经研究了许多类似的问题,但它们都与没有索引的TimestampDateTime字段类型有关.至少这是我的理解.

众所周知,在约会时间方面有一定的优势.将它们放在一边一分钟,假设表的引擎是InnoDB10+ million records,当条件基于以下条件时,哪个查询执行得更快:

  1. 带索引的日期时间
  2. 带索引的int

换句话说,最好将日期和时间存储为DateTime或UNIX时间戳存储在int?请记住,不需要使用任何内置的MySQL函数.

Update

使用MySQL 5.1.41(64位)和int0万条记录进行测试,初始测试显示速度差异显著,有利于int条记录.使用了两个表格,tbl_dtDateTimetbl_intint列.结果很少:

SELECT SQL_NO_CACHE COUNT(*) FROM `tbl_dt`;
+----------+
| COUNT(*) |
+----------+
| 10000000 |
+----------+
1 row in set (2 min 10.27 sec)

SELECT SQL_NO_CACHE COUNT(*) FROM `tbl_int`;
+----------+
| count(*) |
+----------+
| 10000000 |
+----------+
1 row in set (25.02 sec)

SELECT SQL_NO_CACHE COUNT(*) FROM `tbl_dt` WHERE `created` BETWEEN '2009-01-30' AND '2009-12-30';
+----------+
| COUNT(*) |
+----------+
|   835663 |
+----------+
1 row in set (8.41 sec)

SELECT SQL_NO_CACHE COUNT(*) FROM `tbl_int` WHERE `created` BETWEEN 1233270000 AND 1262127600;
+----------+
| COUNT(*) |
+----------+
|   835663 |
+----------+
1 row in set (1.56 sec)

我将发布另一个更新,在一个表中包含shantanuo建议的两个字段.

Update #2

多次服务器崩溃后的最终结果:)Int type的速度明显更快,无论运行什么查询,速度差异与上面的结果基本相同.

观察到的"奇怪"现象是,当两种字段类型都存储在同一个表中时,执行时间基本相同.MySQL似乎足够聪明,可以判断在DateTime和int中存储的值是否相同.没有找到任何关于这个主题的文档,因此这只是一个观察.

推荐答案

我的直觉是Int总是更快.然而,情况似乎并非如此

http://gpshumano.blogs.dri.pt/2009/07/06/mysql-datetime-vs-timestamp-vs-int-performance-and-benchmarking-with-myisam/

编辑后添加:我知道您使用的是InnoDB,而不是MyISAM,但在InnoDB的 case 中,我没有发现任何与此相矛盾的地方.此外,同一位作者还进行了InnoDB测试

http://gpshumano.blogs.dri.pt/2009/07/06/mysql-datetime-vs-timestamp-vs-int-performance-and-benchmarking-with-innodb/

Mysql相关问答推荐

mysql使用LIKE查找二进制字段有问题

拒绝非超级用户访问停靠的MariaDB(超级用户工作)

客户跨订阅的跨时间线计数

MySQL RDS ALTER TABLE ENUM短暂中断了我的数据库连接

SQL/Pyspark -判断条件

仅获取我不是最后一个 comments 者的博客帖子

无法确定查询逻辑

获取每个参数的记录,不重复

Travis 构建失败并出现错误 LOAD DATA LOCAL INFILE 文件请求因访问限制而被拒绝

如何使用 DBD::mysql 判断 MySQL 服务是否正在运行

获取 MySQL 中每一行之间负差的总和

JOOQ:如何将 POJO 列序列化为 JSON

如果我创建一个没有主键的表然后添加一个主键,主键是聚集索引吗?

终止空闲的mysql连接

不是唯一的表/别名

MySQL - 使一对值唯一

MySQL中的行值增加和减少1

MySQL:ALTER IGNORE TABLE 给出违反完整性约束

在 PHP 中运行 MySQL *.sql 文件

MySQL 错误 2014 的原因在其他无缓冲查询处于活动状态时无法执行查询