我有一个 MySQL 服务器将事件保存在数据库中,数据库如下所示:
id | epoch_time | type | event_text | ....
---|------------|------|-------------|-----
01 | 1487671205 | 0 | user-login | ....
02 | 1487671284 | 0 | user-logout | ....
03 | 1487671356 | 1 | sys_error | ....
04 | 1487671379 | 0 | user-logout | ....
05 | 1487671389 | 2 | user_error | ....
06 | 1487671397 | 1 | sys_error | ....
在 web UI 上,有一个按类型分类的过去 24 小时事件的汇总,因为数据库保留了 1 年的数据日志,目前有超过 100 万条记录,这使得网站加载速度非常慢(来自显而易见的原因)。
SQL查询很简单,
SELECT COUNT(id) as total FROM `eventLog` WHERE `epoch_time` >= (UNIX_TIMESTAMP() - 86400)
我的问题是 - 有没有办法“告诉”MySQL epoch_time 列已排序,以便一旦它命中具有以下内容的原始数据:
epoch_time < (UNIX_TIMESTAMP() - 86400)
查询结束。
谢谢
[更新]
谢谢大家的帮助,我尝试添加索引但性能仍然很差(加载页面大约需要 7 - 12 秒)
仅仅为此保留统计信息是否有意义?
最佳答案
您可以使用以下方法将 epoch_time 设置为索引:
ALTER TABLE `eventLog` ADD INDEX epoch_time (`epoch_time`)
这将使您的查询运行得更快,
关于php - MySql 行进行排序以提高性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42364930/