自己加入表 - 性能

PKK*_*PKK 2 mysql self-join

我想为以下加入提供一些帮助.我有一个表(大约有2000万行),包括:

MemberId(主键)| Id(主键)| TransactionDate | 平衡

我想在一个查询中为所有客户获取最新的余额.我知道我可以做这样的事情(我只是从记忆中写下来的).但这种方式非常慢.

SELECT * 
FROM money 
WHERE money.Id = (SELECT MAX(Id) 
                  FROM money AS m 
                  WHERE m.MemberId = money.MemberId)
Run Code Online (Sandbox Code Playgroud)

还有其他(更快/更智能)的选择吗?

nik*_*org 5

在我经历过的所有优化教程和截屏视频中,连接总是优于子查询.使用子查询时,将为每个比较执行子查询,其中仅与连接一起执行.

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
Run Code Online (Sandbox Code Playgroud)