より効率的で、より少ないリソースを使用するものを知っている人はいますか?
方法 1 -- 単一の SELECT ステートメントを使用して 1 つのテーブルからデータを取得し、それを反復処理して別のテーブルで複数の UPDATE を実行します。EG (疑似コード、execute() はクエリを実行):
Query1_resultset = execute("SELECT item_id, sum(views) as view_count FROM tableA WHERE condition=1");
while(Query1_resultset as row) {
execute("UPDATE tableB SET view_count=row.view_count WHERE id=row.item_id");
}
方法 2 -- 単一の INSERT.. ON DUPLICATE KEY UPDATE ステートメントを、ネストされた SELECT ステートメントと共に使用します。例えば:
INSERT INTO tableB (id, view_count) SELECT item_id, SUM(views) as view_count FROM tableA WHERE condition=1 ON DUPLICATE KEY UPDATE view_count=VALUES(view_count);
注: tableB の ID は主キーです。キーが存在することがわかっているため、実際には INSERTS はありません。したがって、すべての更新です。このステートメントを使用して、複数ではなく単一のクエリを渡すだけです。
どちらかがより効率的である理由について、私は本当に興味があります。実行速度を決定するのはクエリの数ですか? ボトルネックはどこですか?スケーリングできるものを探しています(更新される行の数は毎日増えます)。
何か案は?
ありがとう