我正在设计一个大型数据库.在我的应用程序中,我将有很多行,例如我目前有一个表有400万条记录.我的大多数查询都使用datetime子句来选择数据.在mysql数据库中索引datetime字段是一个好主意吗?
Select field1, field2,.....,field15
from table where field 20 between now() and now + 30 days
Run Code Online (Sandbox Code Playgroud)
我试图让我的数据库运行良好,查询运行顺利
更多,您认为我应该创建一个高效数据库的想法是什么?
Exp*_*lls 135
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子句中使用的列).
Bau*_*han 17
这里作者执行的测试显示整数unix时间戳优于DateTime.注意,他使用了MySql.但我觉得无论你使用什么数据库引擎比较整数比比较日期稍快,所以int index比DateTime索引更好.取T1 - 比较2个日期的时间,T2 - 比较2个整数的时间.在索引字段上搜索大约需要O(log(行))时间,因为索引基于一些平衡树 - 对于不同的数据库引擎可能不同,但无论如何Log(行)是常见的估计.(如果不使用位掩码或基于r树的索引).差异是(T2-T1)*Log(行) - 如果经常执行查询,可能会起作用.
我知道这个问题是几年前提出的,但我刚刚找到了解决方案。我向日期时间列添加了索引。我从调用按日期时间排序的最后 600 条记录的 1.6 秒开始,添加索引后,它下降到 0.0028 秒。我想说这是一场胜利。
ALTER TABLE `database`.`table`
ADD INDEX `name_of_index` (`datetime_field_from_table`);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
103355 次 |
| 最近记录: |