首先,我要说的是,我已经研究了许多类似的问题,但它们都与没有索引的Timestamp
和DateTime
字段类型有关.至少这是我的理解.
众所周知,在约会时间方面有一定的优势.将它们放在一边一分钟,假设表的引擎是InnoDB
和10+ million records
,当条件基于以下条件时,哪个查询执行得更快:
- 带索引的日期时间
- 带索引的int
换句话说,最好将日期和时间存储为DateTime
或UNIX时间戳存储在int
?请记住,不需要使用任何内置的MySQL函数.
Update
使用MySQL 5.1.41(64位)和int
0万条记录进行测试,初始测试显示速度差异显著,有利于int
条记录.使用了两个表格,tbl_dt
和DateTime
,tbl_int
和int
列.结果很少:
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中存储的值是否相同.没有找到任何关于这个主题的文档,因此这只是一个观察.