我想在下面的工作中得到一些帮助。
我有一个表(大约有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/