MAX_ROWS 힌트를 넘어 MySQL 테이블의 행 수를 효과적으로 제한하려면 어떻게 해야 합니까?

DDD
풀어 주다: 2024-11-11 22:48:03
원래의
308명이 탐색했습니다.

How Can You Effectively Limit Row Count in MySQL Tables Beyond the MAX_ROWS Hint?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿