mysql datetime timestamp 索引_MySQL Integer与DateTime索引
首先,我已经看过很多类似的问题,但是所有这些问题都Timestamp与DateTime字段类型有关,而没有索引。至少那是我的理解。
众所周知,DateTime具有某些优势。把它们放在一边了一分钟,并假设表的引擎是InnoDB用10+ million
records,它查询将更快地执行时标准基于:
带索引的DateTime
带索引的int
换句话说,最好将日期和时间存储为?DateTime或UNIX时间戳int。请记住,不需要使用任何内置的MySQL函数。
更新资料
使用MySQL
5.1.41(64位)和1000万条记录进行了测试,初步测试显示速度存在明显差异,而则支持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的建议在表中发布两个字段的另一个更新。
更新#2
大量服务器崩溃后的最终结果:) Int类型明显更快,无论运行什么查询,其速度差异与上述结果大致相同。
观察到“奇怪”的事情是,当两种字段类型都存储在同一张表中时,执行时间几乎相同。看起来MySQL足够聪明,可以确定存储在DateTime和int中的值何时相同。尚未找到有关该主题的任何文档,因此仅是一个观察。
首先,我已经看过很多类似的问题,但是所有这些问题都Timestamp与DateTime字段类型有关,而没有索引。至少那是我的理解。 众所周知,DateTime具有某些优势。把它们放在一边了一分钟,并假设表的引擎是InnoDB用10+ million records,它查询将更快地执行时标准基于: 带索引的DateTime 带索引的int 换句话说,最好将日期和时间存储为?DateTime或UNIX时间戳int。请记住,不需要使用任何内置的MySQL函数。 更新资料 使用MySQL 5.1.41(64位)和1000万条记录进行了测试,初步测试显示速度存在明显差异,而则支持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的建议在表中发布两个字段的另一个更新。 更新#2 大量服务器崩溃后的最终结果:) Int类型明显更快,无论运行什么查询,其速度差异与上述结果大致相同。 观察到“奇怪”的事情是,当两种字段类型都存储在同一张表中时,执行时间几乎相同。看起来MySQL足够聪明,可以确定存储在DateTime和int中的值何时相同。尚未找到有关该主题的任何文档,因此仅是一个观察。