我有一个MySQL服务器将事件保存在DB中,DB看起来像这样:
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年的数据记录,目前有超过1M的记录,这使得网站加载非常慢(来自显而易见的原因)。
SQL查询很简单,
SELECT COUNT(id) as total FROM `eventLog` WHERE `epoch_time` >= (UNIX_TIMESTAMP() - 86400)
我的问题是 - 有没有办法告诉MySQL epoch_time列是如何排序的,以便一旦它击中具有以下内容的原始列:
epoch_time < (UNIX_TIMESTAMP() - 86400)
查询将结束。
由于
[UPDATE]
谢谢大家的帮助,我试图添加索引,但性能仍然不好(加载页面约7-12秒)
仅保留统计信息是否有意义?
答案 0 :(得分:1)
您可以使用以下方法将epoch_time设置为索引:
ALTER TABLE `eventLog` ADD INDEX epoch_time (`epoch_time`)
这将使您的查询运行得更快,