1
我有MySQL中的視圖它是由三個表聯合在一起:的MySQL引發火災的次數太多
CREATE VIEW program_operator_jct_view AS
select
program_id,
operator_code,
'PROGRAM_OPERATOR' AS type
from
program_operator_jct
UNION
(select
program_id,
operator_code,
'PROGRAM_GROUP' AS type
from
program_operator_group_jct pg_jct,
operator_group_jct og_jct
where
pg_jct.group_id = og_jct.group_id)
從這個觀點,我創造了更高的性能,這是索引,以便我的結果彙總表從這個彙總表可以通過覆蓋索引返回:
CREATE TABLE `program_operator_jct_summary` (
`program_id` int(7) NOT NULL,
`operator_code` varchar(6) NOT NULL,
PRIMARY KEY (`program_id`,`operator_code`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
//BUILD SUMMARY PROCEDURE
delimiter //
CREATE PROCEDURE update_program_operator_jct_summary()
BEGIN
DELETE FROM program_operator_jct_summary;
INSERT INTO program_operator_jct_summary select DISTINCT program_id, operator_code from program_operator_jct_view;
INSERT INTO trigger_record (name) VALUES ('update_program_operator_jct_summary');
END
//
我重視這個過程,插入,更新和刪除強調錶從而彌補了彙總表的觸發器:
-program_operator_jct
-program_operator_group_jct
-operator_group_jct
例:
delimiter //
CREATE TRIGGER trigger_program_operator_jct_insert AFTER INSERT ON program_operator_jct
FOR EACH ROW
BEGIN
CALL update_program_operator_jct_summary();
END
//
這裏是我的問題,當我加入(5)運營商的program_operator_jct:
INSERT INTO program_operator_jct (program_id, operator_code) VALUES
('112', '000500'),
('112', '000432'),
('112', '000501'),
('112', '000264'),
('112', '000184')
這個觸發器運行(5)次,如果我添加100個運算符,則此觸發器運行100次。這是一個使用觸發器的好地方,因爲我不必擔心彙總表與下劃線表過期。
但是,爲擴展插入中的每個值重建彙總表會帶來太多的性能下降(有時候我會一次向程序添加數百個運算符)。我希望觸發器在下劃線表格上執行擴展插入後運行一次。這可能嗎?
謝謝你的時間阿蘭。 – 2011-05-04 21:39:13
從mysql 5.5 FAQ:'B.5.3:MySQL 5.5是否具有語句級或行級觸發器?在MySQL 5.5中,所有觸發器都是FOR EACH ROW - 也就是說,對於插入,更新或刪除的每一行都會激活觸發器。 MySQL 5.5不支持使用FOR EACH STATEMENT的觸發器 – Johan 2011-05-30 15:08:37