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

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

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

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

什么是field 20?

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子句中使用的列)。

谢谢你的解释。这真的有帮助。我相信我会有更多的过滤器。我只是想确保索引日期时间字段是一个好主意,因为我们可能有重复的日期时间。但你的回答解释了:)谢谢

+1'用于连接和where子句'。索引策略的一个重要经验法则。现在很明显我想到了,但之前没有发生过

但是,如果您使用日期范围查询数据,例如数据范围从"2017-01-01 11:20"到"2018-01-03 12:12",即使我没有使SELECT查询更快索引date time列...索引在我使用equal操作时快速查询..我是对的吗?

如果使用DAY(datetime)或HOUR(datetime)等时间函数查询datetime字段怎么样?在这种情况下,指数会帮助还是阻碍?

嗨@Explosion Pills,如果我只需要查询年份和月份的表格,如果我创建一个只有年份和月份的新列然后将其编入索引,我将获得更好的性能,而不是直接创建datetime列的索引?比如我创建一个值为201801的列。

这里作者执行的测试显示整数unix时间戳优于DateTime。注意,他使用了MySql。但我觉得无论你使用什么数据库引擎比较整数比比较日期稍快,所以int index比DateTime索引更好。取T1 - 比较2个日期的时间,T2 - 比较2个整数的时间。在索引字段上搜索大约需要O(log(行))时间,因为索引基于一些平衡树 - 对于不同的数据库引擎可能不同,但无论如何Log(行)是常见的估计。 (如果不使用位掩码或基于r树的索引)。差异是(T2-T1)* Log(行) - 如果经常执行查询,可能会起作用。

谢谢。我当时认为这是一个选择,但不知道如何处理它。我相信你绝对正确的整数总是更快。

更好?我怀疑unix时间戳对所有情况都更好。是的,存储整数通常比存储字符串更快,但是MySQL暴露的所有DateTime函数呢?自己实现它们会对性能或功能产生负面影响。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值