MySQL Integer与DateTime索引

时间:2011-01-04 13:40:17

标签: mysql indexing innodb

首先让我说我已经查看了许多类似的问题,但所有这些问题都与TimestampDateTime字段类型无关,而且没有索引。至少这是我的理解。

众所周知,DateTime有一些优势。将它们搁置一分钟,并假设表格的引擎为InnoDB 10+ million records,当条件基于以下条件时,该查询的执行速度会更快:

  
      
  1. 带索引的日期时间
  2.   
  3. int with index
  4.   

换句话说,最好将日期和时间存储为DateTimeint中的UNIX时间戳?请记住,不需要使用任何内置的MySQL函数。

更新

使用MySQL 5.1.41(64位)和1000万条记录进行测试,初始测试显示出明显的速度差异,有利于int。使用了两个表,tbl_dt DateTimetbl_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中时确定值是否相同。没有找到关于这个主题的任何文件,因此只是一个观察。

3 个答案:

答案 0 :(得分:10)

我在test mentioned in the above answer中看到,作者基本上证明了当UNIX time提前计算时,INT获胜。

答案 1 :(得分:6)

我的直觉是说整体总是更快。但是,情况似乎并非如此

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

编辑补充说:我意识到你正在使用InnoDB,而不是MyISAM,但我还没有发现任何与InnoDB案例相矛盾的内容。此外,同一作者进行了InnoDB测试

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

答案 2 :(得分:0)

这取决于你的应用程序,你可以在MySQL Date Format: What Datatype Should You Use? We Compare Datetime, Timestamp and INT.中的Mysql服务器中的DATETIME,TIMESTAMP和INT类型的真实比较和基准测试中看到,在某些情况下,你可以看到INT比其他情况更好,在某些情况下案例DATETIME有更好的表现。和完全取决于您的应用