私は2つのinnodbテーブルを持っています:
記事
id | title | sum_votes
------------------------------
1 | art 1 | 5
2 | art 2 | 8
3 | art 3 | 35
投票
id | article_id | vote
------------------------------
1 | 1 | 1
2 | 1 | 2
3 | 1 | 2
4 | 2 | 10
5 | 2 | -2
6 | 3 | 10
7 | 3 | 15
8 | 3 | 12
9 | 3 | -2
新しいレコードがテーブルに挿入されたら、すべての投票の合計を計算してテーブルのフィールドvotes
を更新したいと思います。sum_votes
articles
質問
votes
SUM()計算自体が非常に重い場合(テーブルに700Kレコードがある場合)、どちらの方法がより効率的です。
1.トリガーの作成
CREATE TRIGGER `views_on_insert`
AFTER INSERT
ON `votes`
FOR EACH ROW
BEGIN
UPDATE `articles` SET
sum_votes = (
SELECT SUM(`vote`)
FROM `votes`
WHERE `id` = NEW.article_id
)
WHERE `id` = NEW.article_id;
END;
2.アプリケーションで2つのクエリを使用する
SELECT SUM(`vote`) FROM `votes` WHERE `article_id` = 1;
UPDATE `articles`
SET sum_votes = <1st_query_result>
WHERE `id` = 1;
最初の方法はよりクリーンに見えますが、SELECTクエリが実行されている間はテーブルがロックされますか?