MySQL整数与date时间索引

让我首先说我已经看过很多类似的问题,但是它们都与TimestampDateTime Timestamp字段types没有索引有关。 至less这是我的理解。

众所周知,DateTime有一定的优势。 把它们搁置一会儿,并假设表的引擎是InnoDB10+ million records ,当条件基于:

  1. 带索引的DateTime
  2. int与索引

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

更新

使用MySQL 5.1.41(64位)和1000万条logging进行testing,初始testing显示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) 

我将在shantanuobuild议的一个表中发布另一个更新。

更新#2

多次服务器崩溃后的最终结果:) Inttypes显着加快,无论查询运行的是什么,速度差异都与上面的结果差不多。

观察到“奇怪”的事情是两个字段types存储在同一个表中时执行时间差不多。 看起来MySQL非常聪明,能够在DateTime和int中存储值的时候知道这些值是什么时候相同的。 没有find有关这个问题的任何文件,因此只是一个观察。

我的直觉就是说整数总是更快。 但是,这似乎并非如此

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

编辑补充:我意识到你使用的是InnoDB,而不是MyISAM,但是在InnoDB的情况下,我还没有发现任何与之相矛盾的东西。 另外,同一位作者进行了InnoDBtesting

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

我看到在上面的答案中提到的testing中 ,笔者基本certificate,当UNIX time提前计算时, INT胜。