我想在下面的工作中得到一些帮助。
我有一个表(大约有2000万行)包含:
MemberId(主键)| Id(主键)| TransactionDate |余额
我想在一个查询中得到所有客户的最新余额。
我知道我可以做这样的事情(我只是凭记忆写的)。但这条路太慢了。

SELECT *
FROM money
WHERE money.Id = (SELECT MAX(Id)
                  FROM money AS m
                  WHERE m.MemberId = money.MemberId)

还有其他(更快/更聪明)的选择吗?

最佳答案

在我所经历的所有优化教程和屏幕广播中,连接总是比子查询更受欢迎。使用子查询时,每次比较都会执行子查询,其中只有一次与联接相同。

SELECT *
FROM money m
INNER JOIN (
    SELECT memberId, MAX(id) AS maxid
    FROM money
    GROUP BY memberId
) mmax ON mmax.maxid = m.id AND mmax.memberId = m.memberId

关于mysql - 自行联接表-性能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8713476/

10-10 14:57