MySQL整数与date时间索引
让我首先说我已经看过很多类似的问题,但是它们都与Timestamp
和DateTime
Timestamp
字段types没有索引有关。 至less这是我的理解。
众所周知,DateTime有一定的优势。 把它们搁置一会儿,并假设表的引擎是InnoDB
有10+ million records
,当条件基于:
- 带索引的DateTime
- int与索引
换句话说,最好把date和时间存储为int
DateTime
或UNIX时间戳? 请记住,不需要使用任何内置的MySQL函数。
更新
使用MySQL 5.1.41(64位)和1000万条logging进行testing,初始testing显示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)
我将在shantanuobuild议的一个表中发布另一个更新。
更新#2
多次服务器崩溃后的最终结果:) Inttypes显着加快,无论查询运行的是什么,速度差异都与上面的结果差不多。
观察到“奇怪”的事情是两个字段types存储在同一个表中时执行时间差不多。 看起来MySQL非常聪明,能够在DateTime和int中存储值的时候知道这些值是什么时候相同的。 没有find有关这个问题的任何文件,因此只是一个观察。
我的直觉就是说整数总是更快。 但是,这似乎并非如此
编辑补充:我意识到你使用的是InnoDB,而不是MyISAM,但是在InnoDB的情况下,我还没有发现任何与之相矛盾的东西。 另外,同一位作者进行了InnoDBtesting
我看到在上面的答案中提到的testing中 ,笔者基本certificate,当UNIX time
提前计算时, INT
胜。