php - 为什么mysql查询花费太多时间来获取结果?
问题描述
我有一个包含两个表的数据库,一个是users
和users_activity
。
用户活动表有一些列,包括userid
与用户表的 id 匹配的列。
我想使用 JOINS 从两个表中得到一些结果。
这是我的 MySQL 查询。请让我知道我的错误是什么/为什么这个查询花费了太多时间?
SELECT ua.userid, COUNT(ua.id) user_active, u.name
FROM `user_activity` ua, users u
WHERE ua.target = 'Save Post' OR
ua.target = 'Send comment' OR
ua.target = 'Send Reply'
AND ua.created_on >= 1630454401
AND ua.userid = u.id
GROUP BY ua.userid
ORDER BY COUNT(ua.userid) DESC LIMIT 5
谢谢您的帮助。
解决方案
如果您同时使用 AND 和 OR ,请在 where 子句的位周围加上括号
SELECT ua.userid, COUNT(ua.id) user_active, u.name
FROM `user_activity` ua, users u
WHERE
(
ua.target = 'Save Post' OR
ua.target = 'Send comment' OR
ua.target = 'Send Reply'
)
AND ua.created_on >= 1630454401
GROUP BY ua.userid
ORDER BY COUNT(ua.userid) DESC
LIMIT 5
当然,如果您正在处理十亿行,则需要一些时间
此外,您应该习惯 JOIN 语法,而不是旧的逗号分隔的表列表。它们更加灵活和高效
SELECT ua.userid, COUNT(ua.id) user_active, u.name
FROM user_activity ua
JOIN users u ON ua.userid = u.id
WHERE
(
ua.target = 'Save Post' OR
ua.target = 'Send comment' OR
ua.target = 'Send Reply'
)
AND ua.created_on >= 1630454401
AND ua.userid = u.id
GROUP BY ua.userid
ORDER BY COUNT(ua.userid) DESC
LIMIT 5
推荐阅读
- clojure - 如何使用 map-indexed 和 vector 在 Clojure 中格式化字符串
- laravel - 具有多个数据库的 Laravel
- python - Selenium 以编程方式单击下一步按钮,直到最后一页
- google-search-appliance - “生成报告时发生内部错误。” 发生错误
- javascript - 检查数组中是否存在相同的对象 - Javascript
- javascript - 我无法从数组中删除相邻的值
- visual-studio - VS2015解决方案上的静态内存总量
- reactjs - Material UI 无法将占位符添加到 TextField 类型的 Date
- mysql - 通过触发器将所有数据从一个表复制到另一个表 | phpmyadmin
- javascript - swal 函数在使用 ajax 加载的子视图中不起作用