MySQL 테이블의 행 수 제한: MAX_ROWS 힌트를 넘어서
MySQL은 테이블을 생성할 때 MAX_ROWS 매개변수 지정을 허용하지만 데이터베이스 엔진에 대한 단순한 제안입니다. 테이블이 이 제한을 초과하면 행 수에 대한 절대적인 제한이 효과적이지 않게 됩니다.
최대 행 수를 실제로 적용하려면 대체 접근 방식이 필요합니다. 그러한 방법 중 하나는 테이블의 현재 행 수를 확인하는 BEFORE INSERT 트리거를 생성하는 것입니다.
DELIMITER $$ CREATE TRIGGER trigger1 BEFORE INSERT ON table1 FOR EACH ROW BEGIN SELECT COUNT(*) INTO @cnt FROM table1; IF @cnt >= 25 THEN CALL sth(); -- raise an error END IF; END $$ DELIMITER ;
이 트리거는 새 행을 삽입하기 전에 테이블의 행 수를 평가합니다. 개수가 미리 정의된 제한(예: 25)을 충족하거나 초과하면 오류가 발생하여 삽입이 효과적으로 방지됩니다.
그러나 이 접근 방식은 특히 대규모 테이블의 경우 COUNT 작업으로 인해 성능 저하가 발생할 수 있습니다. 계산 비용이 많이 듭니다.
MySQL 5.5에는 오류를 발생시키는 또 다른 방법으로 SIGNAL // RESIGNAL 문이 도입되었습니다. 이는 다음과 같이 트리거에 통합될 수 있습니다.
CREATE TRIGGER trigger1 BEFORE INSERT ON table1 FOR EACH ROW BEGIN IF 25 <= ROW_COUNT() THEN SIGNAL SQLSTATE '23000' SET MESSAGE_TEXT = 'Table size limit reached.'; // Raise an error END IF; END
이 기술은 InnoDb 테이블에서 최적화된 COUNT(*) 함수를 활용하여 향상된 성능을 제공하고 행 개수 적용 메커니즘의 전반적인 효율성을 향상시킵니다.
위 내용은 MAX_ROWS 힌트를 넘어 MySQL 테이블의 행 수를 효과적으로 제한하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!