假设我有一个 MySQL 表,其中包含 5 亿条记录
它有一个列 ts
,该列已索引并具有时间戳作为值。
这样做效率高吗
从表中选择 *,其中 ts>=time()-24hours
以及过去 24 小时/周/月/年?
或者我应该选择 nosql 吗?
最佳答案
我发现 MySQL 在处理大日期范围时经常会丢弃索引。您的“">=”从技术上讲是一个范围(以“now”结尾),对于优化器来说可能是一个异常(exception),因为它应该能够跳转到起点...
如果您能忍受构建表的时间,请使用EXPLAIN
来查看它是否正在使用索引。
希望您不需要SELECT *
。如果您的结果中只需要几个较小的列,请将它们也放入索引中,这将使 MySQL 不必从磁盘读取底层较宽的行。
关于mysql - 500,000,000 条记录,int 字段时间戳索引,mysql 会通过这个查询处理搜索吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12484057/