Maison  >  Article  >  base de données  >  Comment limiter efficacement le nombre de lignes dans les tables MySQL au-delà de l'indice MAX_ROWS ?

Comment limiter efficacement le nombre de lignes dans les tables MySQL au-delà de l'indice MAX_ROWS ?

DDD
DDDoriginal
2024-11-11 22:48:03316parcourir

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

Limiter le nombre de lignes dans les tables MySQL : au-delà de l'indice MAX_ROWS

Bien que MySQL permette de spécifier un paramètre MAX_ROWS lors de la création de tables, il sert de simple suggestion pour le moteur de base de données. Les tableaux peuvent dépasser cette limite, la rendant inefficace en tant que plafond absolu du nombre de lignes.

Pour une véritable application d'un nombre maximum de lignes, des approches alternatives sont nécessaires. L'une de ces méthodes consiste à créer un déclencheur BEFORE INSERT qui vérifie le nombre de lignes actuel dans le tableau :

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 ;

Ce déclencheur évalue le nombre de lignes du tableau avant d'insérer une nouvelle ligne. Si le nombre atteint ou dépasse une limite prédéfinie (par exemple, 25), cela déclenche une erreur, empêchant ainsi l'insertion.

Cependant, cette approche peut introduire des pénalités de performances, en particulier pour les grandes tables, car l'opération COUNT peut être coûteux en calcul.

MySQL 5.5 introduit les instructions SIGNAL // RESIGNAL comme un autre moyen de générer des erreurs. Cela peut être incorporé dans le déclencheur comme suit :

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

Cette technique offre des performances améliorées en tirant parti de la fonction COUNT(*) optimisée sur les tables InnoDb, améliorant ainsi l'efficacité globale du mécanisme d'application du nombre de lignes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn