triggers을 사용해야하는 것 같습니다.
:
DELIMITER //
CREATE TRIGGER after_insert AFTER INSERT ON big_table
FOR EACH ROW
BEGIN
DECLARE small_table_rows INTEGER;
INSERT INTO small_table (field1, field2) VALUES (NEW.field1, NEW.field2);
SELECT COUNT(*) INTO small_table_rows FROM small_table;
IF small_table_rows > 10000 THEN
DELETE FROM small_table ORDER BY id ASC LIMIT 1;
END IF
END;//
DELIMITER ;
DELIMITER //
CREATE TRIGGER after_update AFTER UPDATE ON big_table
FOR EACH ROW
BEGIN
UPDATE small_table
SET field1 = NEW.field1, field2 = NEW.field2
WHERE small_table.id = NEW.id;
END;//
DELIMITER ;
DELIMITER //
CREATE TRIGGER after_delete AFTER DELETE ON big_table
FOR EACH ROW
BEGIN
DELETE FROM small_table WHERE small_table.id = OLD.id;
END;//
DELIMITER ;
테이블의 열이 많은 경우 트리거가 다루기 얻을 수 있지만 그것은 상당히 간단합니다. MyISAM 대 InnoDB의 성능 특성을 고려해 볼 수 있습니다. InnoDB는 실행중인 쿼리의 종류에 따라 전반적인 성능을 향상시킬 수 있습니다.
보기를 사용하고 싶지 않습니다. MySQL의 뷰는 구체화되지 않으므로 일반적으로 성능 이점 (원하는대로 들리는)을 얻지 못하고 뷰가있는 테이블과 뷰를 다르게 인덱싱 할 수 없습니다 기반.
감사를 사용할 수 있습니다. 트리거가 가장 좋은 방법 인 것처럼 보입니다. – amardilo