0

假设我有一个 MySQL 表,里面有 5 亿条记录

它有一个列ts,该列被索引并具有时间戳作为值。做一个有效率吗

select * from table where ts>=time()-24hours

以及过去 24 小时/周/月/年?

还是我应该去 nosql ?

4

1 回答 1

2

我发现 MySQL 在处理大日期范围时经常会丢弃索引。您的“>=”,从技术上讲是一个范围(以“现在”结尾),对于优化器来说可能是一个例外,因为它应该能够跳转到起点......

如果您可以忍受建表的时间,请使用EXPLAIN它来查看它是否正在使用索引。

希望你不需要SELECT *。如果您的结果中只需要几个较小的列,请将它们也放入索引中,这将使 MySQL 不必从磁盘读取底层更宽的行。

于 2012-09-18T20:00:51.030 回答