MySQL 整数与日期时间索引

标签 mysql indexing innodb

首先让我说我看过许多类似的问题,但它们都与没有索引的 TimestampDateTime 字段类型有关。至少这是我的理解。

众所周知,DateTime 有一定的优势。将它们放在一边,假设表的引擎是 InnoDB,具有 10+ 百万条记录,当条件基于时,哪个查询会执行得更快:

  1. DateTime with index
  2. int with index

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

更新

使用 MySQL 5.1.41(64 位)和 1000 万条记录进行测试,初始测试显示有显着的速度差异有利于 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)

我将按照 shantanuo 的建议在一个表中发布另一个包含两个字段的更新.

更新 #2

多次服务器崩溃后的最终结果 :) Int 类型明显更快,无论运行什么查询,速度差异或多或少与上述结果相同。

观察到的“奇怪”的事情是当两个字段类型存储在同一个表中时,执行时间或多或少相同。似乎 MySQL 足够聪明,可以确定存储在 DateTime 和 int 中的值何时相同。尚未找到有关该主题的任何文档,因此只是一个观察结果。

最佳答案

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

关于MySQL 整数与日期时间索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4594229/

相关文章:

mysql - 在 mysql 中使用某些查询查看表的每个单元格的特定查询值?

mysql - 将关联数组中的数据保存到数据库

php - 搜索引擎是否对 somesite.com/index.php?page=photos 这样的网址有问题

mysql - InnoDb Mysql表的行大小限制

php - MySQL 将人口统计数据存储在多个表中

mysql - 如何选择今天日期介于开始日期和结束日期之间的行

mysql - 是否有等效的 EXPLAIN 可以在 ALTER TABLE 查询之前工作?

java.lang.ArrayIndexOutOfBoundsException : 1

mysql - 带有 create 语句的 InnoDb 事务

mysql - 将 MySQL 数据库从 MyISAM 转换为 InnoDB