MySQL触发器触发次数太多

MySQL触发器触发次数太多,mysql,sql,triggers,Mysql,Sql,Triggers,我在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, operato

我在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
//
我将此程序附加到构成汇总表的下划线表的插入、更新和删除触发器上:

-程序运算符

-程序操作员组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
//
当我向program_operator_jct添加(5)个操作符时,我的问题是:

INSERT INTO program_operator_jct (program_id, operator_code) VALUES 
('112', '000500'), 
('112', '000432'), 
('112', '000501'), 
('112', '000264'), 
('112', '000184')
此触发器运行(5)次,如果我添加100个运算符,则此触发器将运行100次。这是一个使用触发器的好地方,因为我不必担心汇总表与下划线表过时


然而,为扩展inserts中的每个值重建一个汇总表对性能的影响太大了(有时我一次向程序添加数百个运算符)。我希望触发器在对下划线表执行扩展插入后运行一次。这可能吗?

触发器正在执行其工作,例如“每行”

我不相信mysql会让你在最后运行一次触发器

插入成功完成后,我将从代码中调用存储过程

如果您担心忘记,请设置一个cron作业,每隔一段时间运行一次


祝你好运。

触发器正在执行其工作,例如“每行”

我不相信mysql会让你在最后运行一次触发器

插入成功完成后,我将从代码中调用存储过程

如果您担心忘记,请设置一个cron作业,每隔一段时间运行一次


祝你好运。

谢谢你抽出时间来。mysql 5.5常见问题解答:
B.5.3:mysql 5.5有语句级还是行级触发器?在MySQL 5.5中,所有触发器都针对每一行,也就是说,触发器针对插入、更新或删除的每一行被激活。MySQL 5.5不支持在每条语句中使用触发器。
感谢您的宝贵时间。MySQL 5.5常见问题解答:
B.5.3:MySQL 5.5是否具有语句级或行级触发器?在MySQL 5.5中,所有触发器都针对每一行,也就是说,触发器针对插入、更新或删除的每一行被激活。MySQL 5.5不支持对每条语句使用触发器。