要对性能进行排序的MySql行

时间:2017-02-21 10:35:58

标签: php mysql performance

我有一个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秒)

仅保留统计信息是否有意义?

1 个答案:

答案 0 :(得分:1)

您可以使用以下方法将epoch_time设置为索引:

ALTER TABLE `eventLog` ADD INDEX epoch_time (`epoch_time`)

这将使您的查询运行得更快,

相关问题