从大型帐户表中检索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实际上是一个时间戳。不确定你们一开始是不是很明显。
答案 0 :(得分:0)
根据您检索的信息的重要程度,您可能还想使用表锁。这将确保在获取最新行时不会发生其他事务。
就效率而言,我会选择以前的查询(在子查询中使用account_no
并假设transaction_date
是唯一的),因为后者很可能需要文件排序(除非你有订购transaction_date
)的DESC
索引。
答案 1 :(得分:0)
首先,您应该在查询中运行EXPLAIN
,以了解MySQL如何“攻击”该问题。
假设transaction_date
被索引(按降序排列),后一个选项更快,因为它避免了同一个表上的(独立)子查询。否则,如果将account_no条件移动到子查询中,前者会更快。