首先我要说的是,我已经看过许多类似的问题,但所有这些问题都与Timestamp
and DateTime
没有索引的字段类型。至少这是我的理解。
众所周知,DateTime 有一定的优势。将它们放在一边一分钟,假设桌子的引擎是InnoDB
with 10+ million records
,当条件基于以下条件时,哪个查询执行速度会更快:
- 带索引的日期时间
- 带索引的整数
换句话说,最好将日期和时间存储为DateTime
或 UNIX 时间戳int
?请记住,无需使用任何内置 MySQL 函数。
Update
使用 MySQL 5.1.41(64 位)和 1000 万条记录进行测试,初步测试显示速度差异显着,有利于int
。用了两张桌子,tbl_dt
with DateTime
and tbl_int
with 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)
我将根据建议发布另一个更新,其中两个字段都在一个表中山塔诺 https://stackoverflow.com/users/139150/.
更新#2
多次服务器崩溃后的最终结果:) Int 类型明显更快,无论运行什么查询,速度差异或多或少与上面的结果相同。
观察到的“奇怪”的事情是,当两个字段类型存储在同一个表中时,执行时间或多或少相同。看来 MySQL 足够聪明,能够判断出存储在 DateTime 和 int 中的值何时相同。尚未找到有关该主题的任何文档,因此这只是一个观察。
我看到在上面答案中提到的测试 http://gpshumano.blogs.dri.pt/2009/07/06/mysql-datetime-vs-timestamp-vs-int-performance-and-benchmarking-with-myisam/,作者基本上证明了当UNIX time
是预先计算出来的,INT
wins.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)