在 mysql 中索引 datetime 字段是一个好主意吗?

我正在设计一个大型数据库。在我的应用程序中,我将有许多行,例如,我目前有一个400万条记录的表。我的大多数查询使用 datetime 子句来选择数据。在 mysql 数据库中索引 datetime 字段是一个好主意吗?

Select field1, field2,.....,field15
from table where field 20 between now() and now + 30 days

我试图保持我的数据库工作良好,并顺利运行查询

更多,你认为我应该有什么想法来创建一个高效率的数据库?

168194 次浏览

MySQL 推荐使用索引的原因很多,包括消除条件之间的行: http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html

这使您的 datetime 列成为索引的优秀候选者,如果您要在查询中频繁地使用它的话。如果您的唯一条件是 BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 30 DAY),并且在该条件中没有其他索引,那么 MySQL 将不得不对每个查询执行 全表扫描全表扫描。我不确定在30天内生成了多少行,但只要少于总行数的1/3,对列使用索引就会更有效率。

您关于创建高效数据库的问题非常宽泛。我想说的是,只需要确保它是规范化的,并且所有适当的列都被索引(即在连接和 where 子句中使用的列)。

在这里 ,作者执行的测试表明,整数 unix 时间戳优于 DateTime。注意,他用的是 MySql。但是我觉得不管你用什么数据库引擎比较整数比较日期稍微快一点,所以 int index 比 DateTime index 好。比较两个日期的 T1时间,比较两个整数的 T2时间。对索引字段的搜索需要大约 O (Log (rows))的时间,因为索引是基于某种平衡树的——对于不同的 DB 引擎可能有所不同,但无论如何 Log (rows)是常见的估计。(如果不使用位掩码或基于 r 树的索引)。所以不同之处在于(T2-T1) * Log (rows)-如果经常执行查询,可能会发挥作用。