我有兩個InnoDB表:處理ON INSERT觸發器時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
表中通過計算所有選票的總和。
問題
哪種方法更有效,如果SUM()計算本身是一個非常沉重的一個(votes
表有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.在我的應用程序
SELECT SUM(`vote`) FROM `votes` WHERE `article_id` = 1;
UPDATE `articles`
SET sum_votes = <1st_query_result>
WHERE `id` = 1;
1方式似乎更清潔,但將表被鎖定的全部時間用兩個查詢SELECT查詢運行?
在給定的例子中,沒有必要每次都計算SUM(),因爲每個記錄只有一個投票。他們只在每個插頁上做了'+1'。我有不同的情況。 – 2011-01-19 09:54:22