【发布时间】:2020-08-07 15:00:07
【问题描述】:
我的查询需要永远加载,members 中只有 800 多行,members_points 中只有 5,100 多行。
有没有我忽略的更有效的方法,或者使用 MySQL 5.5.33 编写此查询的另一种方法?
*更新:5.5 是我的本地主机,5.7 是实时服务器。没有看到任何明显的差异。
这是我目前所拥有的 - 感谢您的反馈
$result = $conn->query("
SELECT subquery.*,
@rank := @rank + 1 `rank`
FROM (SELECT m.id,
m.Name,
m.Column_1,
m.Column_2,
m.Column_3,
SUM(m.id = mp.id_from) total_sent,
SUM(m.id = mp.id_to) total_received,
SUM(m.id = mp.id_from) - SUM(m.id = mp.id_to) `points`
FROM members m
INNER JOIN members_points mp
WHERE Account_Active LIKE 'TRUE'
GROUP BY m.id,
m.Name) subquery, (SELECT @rank := 0) variable
ORDER BY `points` DESC;
");
【问题讨论】:
-
你知道 mysql 5.5 已经很老了而且被弃用了吗?
-
您是否暗示问题不在于代码,而在于服务器设置?
-
一如既往的优化查询需要一个EXPLAIN和Table的定义,但是mysql 5.5太旧了,所以试试用5.7看看有没有更快的。那是一个小型数据库,因此迁移应该像使用索引查询一样快速运行
-
Account_Active在哪个表中?它在优化方面产生了大的差异,我无法从您提供的内容中看出。它是VARCHAR吗?该测试不检查真/假。请限定列并提供SHOW CREATE TABLE。 -
活跃帐户在成员表中。它是 TINYTEXT。
标签: mysql performance subquery inner-join