Maison > base de données > tutoriel mysql > le corps du texte

Pourquoi le partitionnement HASH est-il problématique lors du partitionnement d'une table par une colonne datetime dans MySQL ?

Susan Sarandon
Libérer: 2024-10-25 00:56:02
original
263 Les gens l'ont consulté

Why is HASH partitioning problematic when partitioning a table by a datetime column in MySQL?

Partitionnement d'une table par colonne Datetime

Dans MySQL, le partitionnement d'une table par colonne datetime permet une gestion efficace des données et des requêtes optimisées en divisant la table en unités logiques plus petites. Cependant, lorsque vous tentez de partitionner une table par colonne datetime à l'aide du partitionnement HASH, des problèmes peuvent survenir lors de la sélection des données pour des jours spécifiques.

Limitations du partitionnement HASH

Utilisation du partitionnement HASH sur Les colonnes datetime peuvent être problématiques car MySQL ne peut pas utiliser l'élagage des partitions. Cela signifie que les requêtes qui filtrent en fonction d'une plage de valeurs datetime peuvent ne pas utiliser la partition spécifiée.

Options de partitionnement alternatives

Pour surmonter ces limitations, des stratégies de partitionnement alternatives peuvent être employé :

  • Ajout d'une colonne entière :

Stocker le résultat de TO_DAYS(DATE()) dans une colonne INTEGER supplémentaire. Cela permet un élagage efficace sur la colonne entière au lieu de la colonne datetime.

  • Partitionnement RANGE :

Partitionnez la table à l'aide du partitionnement RANGE sur TO_DAYS (ftime) colonne. Cela crée des partitions basées sur une plage de jours, permettant une récupération précise des données pour des jours spécifiques.

Exemple

Considérez la table partitionnée RANGE suivante :

CREATE TABLE raw_log_2011_4 (
  id bigint(20) NOT NULL AUTO_INCREMENT,
  logid char(16) NOT NULL,
  tid char(16) NOT NULL,
  reporterip char(46) DEFAULT NULL,
  ftime datetime DEFAULT NULL,
  KEY id (id)
) ENGINE=InnoDB AUTO_INCREMENT=286802795 DEFAULT CHARSET=utf8
  PARTITION BY RANGE( TO_DAYS(ftime) ) (
    PARTITION p20110401 VALUES LESS THAN (TO_DAYS('2011-04-02')),
    PARTITION p20110402 VALUES LESS THAN (TO_DAYS('2011-04-03')),
    ...
    PARTITION p20110429 VALUES LESS THAN (TO_DAYS('2011-04-30')),
    PARTITION future VALUES LESS THAN MAXVALUE
  );
Copier après la connexion

Cette table contiendra des partitions pour chaque jour d'avril 2011. Désormais, la requête :

SELECT * FROM raw_log_2011_4 WHERE ftime = '2011-04-03';
Copier après la connexion

utilisera uniquement la partition p20110403, ce qui permettra une récupération efficace des données pour un jour spécifique.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal