내가 UNION을 함께 세 개의 테이블로 구성되어 MySQL의에서보기가 화재를 유발 이 요약 테이블을 포함하는 인덱스를 통해 반환 할 수 있습니다에서 :MySQL은 너무 많이
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
//
나는 삽입, 업데이트에이 절차를 부착 요약 테이블을 구성하는 밑줄 테이블의 트리거 삭제 :
,691을-program_operator_jct
-program_operator_group_jct
-operator_group_jct
예 :
INSERT INTO program_operator_jct (program_id, operator_code) VALUES
('112', '000500'),
('112', '000432'),
('112', '000501'),
('112', '000264'),
('112', '000184')
:
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) 연산자를 추가 할 때 내 문제입니다 이 트리거는 (5) 실행됩니다. 시간, 나는 100 명의 연산자를 추가하면이 트리거가 100 번 실행됩니다. 밑줄 친 테이블과 구식 인 요약 테이블에 대해 걱정할 필요가 없기 때문에 이것은 트리거를 사용하기에 좋은 곳입니다.
그러나 확장 삽입의 각 값에 대한 요약 테이블을 다시 작성하는 것은 너무 많은 성능에 영향을 미칩니다 (때로는 한 번에 수백 명의 연산자를 프로그램에 추가하는 경우가 있음). 밑줄이 쳐진 테이블에서 확장 삽입이 수행 된 후에 트리거가 한 번 실행되기를 원합니다. 이것이 가능한가?
시간 내 주셔서 감사합니다. –
mysql 5.5 FAQ :'B.5.3 : MySQL 5.5에 문이나 단계의 트리거가 있습니까? MySQL 5.5에서 모든 트리거는 FOR EACH ROW입니다. 즉, 삽입, 업데이트 또는 삭제 된 각 행에 대해 트리거가 활성화됩니다. MySQL 5.5는 FOR EACH STATEMENT를 사용하는 트리거를 지원하지 않습니다 .' – Johan