在MySQL中索引datetime字段是个好主意吗?
我正在devise一个大型数据库。 在我的应用程序,我会有很多行,例如我目前有一个400万条logging的表。 我的大部分查询使用datetime子句来select数据。 在MySQL数据库中索引datetime字段是个好主意吗?
Select field1, field2,.....,field15 from table where field 20 between now() and now + 30 days
我正在努力保持我的数据库工作正常,查询运行顺利
更多的,你认为我应该创build一个高效率的数据库有什么想法?
MySQLbuild议使用索引有各种原因,包括消除条件之间的行: http : //dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html
这使得你的date时间列是一个很好的候选人的索引,如果你打算在频繁的查询条件使用它。 如果您的唯一条件是BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 30 DAY)
并且在条件中没有其他索引,则MySQL将必须对每个查询执行全表扫描 。 我不确定在30天内生成了多less行,但只要不到总行数的三分之一左右,在列上使用索引会更有效率。
您关于创build高效数据库的问题非常广泛。 我会说,只是确保它正常化,所有适当的列索引(即用于连接和where子句)。
这里作者进行的testing表明,整数unix时间戳比DateTime更好。 请注意,他使用MySql。 但是我觉得无论使用什么数据库引擎比较整数都比比较date稍快,所以int index比DateTime索引要好。 取T1 – 比较2个date的时间,T2 – 比较2个整数的时间。 在索引字段上search大约需要O(log(rows))时间,因为基于某些平衡树的索引 – 对于不同的数据库引擎可能会不同,但无论如何Log(行)是常见估计。 (如果你不使用位掩码或基于r-tree的索引)。 所以区别是(T2-T1)*日志(行) – 如果你经常执行你的查询可能会起作用。