MySQL触发器触发次数太多
我在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
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不支持对每条语句使用触发器。