获得最后一次插入的最有效方法

时间:2012-11-23 15:12:08

标签: mysql sql performance

从大型帐户表中检索account_balance,这两种方法中的哪一种更有效?

SELECT account_balance FROM accounts 
    WHERE account_no ='12345' 
    AND transaction_date =(SELECT MAX(transaction_date) FROM accounts);


SELECT account_balance FROM accounts 
    WHERE account_no ='12345'
    ORDER BY transaction_date DESC LIMIT 1

或者如果有比这两个更好的方法,我想知道。

编辑:transaction_date实际上是一个时间戳。不确定你们一开始是不是很明显。

2 个答案:

答案 0 :(得分:0)

根据您检索的信息的重要程度,您可能还想使用表锁。这将确保在获取最新行时不会发生其他事务。

就效率而言,我会选择以前的查询(在子查询中使用account_no并假设transaction_date是唯一的),因为后者很可能需要文件排序(除非你有订购transaction_date)的DESC索引。

答案 1 :(得分:0)

首先,您应该在查询中运行EXPLAIN,以了解MySQL如何“攻击”该问题。

假设transaction_date被索引(按降序排列),后一个选项更快,因为它避免了同一个表上的(独立)子查询。否则,如果将account_no条件移动到子查询中,前者会更快。