关于索引:在mysql中索引datetime字段是个好主意吗?

Is it a good idea to index datetime field in mysql?

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

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

我试图让我的数据库运行良好,查询运行顺利

更多,您认为我应该创建一个高效数据库的想法是什么?


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索引更好。取T1 - 比较2个日期的时间,T2 - 比较2个整数的时间。在索引字段上搜索大约需要O(log(行))时间,因为索引基于一些平衡树 - 对于不同的数据库引擎可能不同,但无论如何Log(行)是常见的估计。 (如果不使用位掩码或基于r树的索引)。差异是(T2-T1)* Log(行) - 如果经常执行查询,可能会起作用。