0

これら 2 つの方法のうち、大きなアカウント テーブルから 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

または、これら2つよりも良い方法があれば、知りたいです。

編集: transaction_date は実際にはタイムスタンプです。最初は明らかだったかどうかはわかりません。

4

2 に答える 2

0

取得する情報の重要度によっては、テーブル ロックを使用することもできます。これにより、最新の行がフェッチされている間、他のトランザクションが発生しないことが保証されます。

効率の観点から、前者のクエリを選択します (サブクエリ内にあり、それが一意account_noであると仮定します)。transaction_datetransaction_dateDESC

于 2012-11-23T15:18:39.250 に答える
0

まず、EXPLAINクエリを実行して、MySQL がどのように問題を「攻撃」するかを調べる必要があります。

transaction_dateインデックスが (降順で) 付けられていると仮定すると、同じテーブルに対する (独立した) サブクエリを回避するため、後者のオプションの方が高速です。それ以外の場合は、account_no 条件をサブクエリに移動すれば、前者の方が高速です。

于 2012-11-23T15:20:24.627 に答える