如何加速mysql的以下程序?

时间:2014-04-11 07:03:00

标签: mysql

我有以下查询

SELECT t1.accountid, t1.accountbalance
FROM transactionstable t1
WHERE transactiondate = (SELECT MAX(transactiondate)
            FROM transactionstable
            WHERE accountid = t1.accountid);

有没有办法替换第二个选择例如使用having子句,怎么办,因为我需要它快(accountid是一个外键)和transactiondate有一个索引。

谢谢!

1 个答案:

答案 0 :(得分:3)

您可以将自JOIN用于每个accountid组的最大日期而不是子查询

SELECT t1.accountid, 
t1.accountbalance    
FROM transactionstable t1
JOIN (SELECT accountid ,MAX(transactiondate) transactiondate
            FROM transactionstable
            GROUP BY accountid ) t
USING (transactiondate ,accountid )  

transactiondate ,accountid上的复合索引也是有帮助的

create index my_idx on my_table(transactiondate ,accountid);