0

这两种方法中哪一种更有效地从大型帐户表中检索 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 实际上是一个时间戳。不知道一开始对你们来说是不是很明显。

4

2 回答 2

0

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

在效率方面,我会选择前一个查询(account_no在子查询中并假设它transaction_date是唯一的),因为后者很可能需要一个文件排序(除非你有一个索引transaction_date是有序的DESC)。

于 2012-11-23T15:18:39.250 回答
0

首先,您应该运行EXPLAIN您的查询以找出 MySQL 如何“攻击”问题。

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

于 2012-11-23T15:20:24.627 回答