php - MySql 行进行排序以提高性能

标签 php mysql performance

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

相关文章:

php - mysql php 无法获取外键值

php - 服务器找不到文件路径

mysql - 是否可以限制 JOIN 查询的结果?

mysql - 如何在mysql中维护批量创建的组ID

mysql - 选择开始日期和此开始日期后的特定天数之间的记录

javascript - 表达和 Sequelize : eager loading belongs to many associations hangs application

javascript - D3js强制布局销毁和重置

PHP if else 条件没有按照期望的结果应用

php - 在帐单地址中将公司标签更改为组织

python - python中变量名与程序效率