Maison > Article > base de données > Introduction détaillée à MySQL précisant le chemin de chaque partition
Vous pouvez spécifier son propre chemin de stockage pour chaque partition de la table de partition. Pour la table du moteur de stockage innodb, vous ne pouvez spécifier que le chemin des données, car les données et l'index sont. stocké dans un fichier. Le moteur de stockage MYISAM peut spécifier les fichiers de données et les fichiers d'index séparément. Généralement, seules les partitions RANGE, LIST et les sous-sous-partitions peuvent avoir besoin de spécifier les chemins de chaque partition séparément. de toutes les partitions des partitions HASH et KEY sont les mêmes. Le chemin spécifié pour la partition RANGE est le même que pour la partition LIST. Ici, nous utiliserons la partition LIST pour explication.
CREATE TABLE th (id INT, adate DATE) engine='MyISAM'PARTITION BY LIST(YEAR(adate)) ( PARTITION p1999 VALUES IN (1995, 1999, 2003) DATA DIRECTORY = '/data/data' INDEX DIRECTORY = '/data/idx', PARTITION p2000 VALUES IN (1996, 2000, 2004) DATA DIRECTORY = '/data/data' INDEX DIRECTORY = '/data/idx', PARTITION p2001 VALUES IN (1997, 2001, 2005) DATA DIRECTORY = '/data/data' INDEX DIRECTORY = '/data/idx', PARTITION p2002 VALUES IN (1998, 2002, 2006) DATA DIRECTORY = '/data/data' INDEX DIRECTORY = '/data/idx');
Remarque : Les fichiers de données et les fichiers d'index du moteur de stockage MYISAM sont stockés dans des bases de données distinctes, ils peuvent donc être définis. pour les fichiers de données et les fichiers d'index Chemins respectifs, le moteur de stockage INNODB ne peut définir que des chemins de données.
CREATE TABLE thex (id INT, adate DATE) engine='InnoDB'PARTITION BY LIST(YEAR(adate)) ( PARTITION p1999 VALUES IN (1995, 1999, 2003) DATA DIRECTORY = '/data/data', PARTITION p2000 VALUES IN (1996, 2000, 2004) DATA DIRECTORY = '/data/data', PARTITION p2001 VALUES IN (1997, 2001, 2005) DATA DIRECTORY = '/data/data', PARTITION p2002 VALUES IN (1998, 2002, 2006) DATA DIRECTORY = '/data/data' );
Après avoir spécifié le chemin, innodb a généré 4 chemins vers le stockage de données dans le chemin d'origine. , myisam génère un fichier th.par indiquant que la table est une table de partition, et le fichier de données et le fichier d'index pointent vers le chemin de stockage réel.
1. Sous-partition
CREATE TABLE tb_sub_dir (id INT, purchased DATE) ENGINE='MYISAM' PARTITION BY RANGE( YEAR(purchased) ) SUBPARTITION BY HASH( TO_DAYS(purchased) ) ( PARTITION p0 VALUES LESS THAN (1990) ( SUBPARTITION s0 DATA DIRECTORY = '/data/data_sub1' INDEX DIRECTORY = '/data/idx_sub1', SUBPARTITION s1 DATA DIRECTORY = '/data/data_sub1' INDEX DIRECTORY = '/data/idx_sub1' ), PARTITION p1 VALUES LESS THAN (2000) ( SUBPARTITION s2 DATA DIRECTORY = '/data/data_sub2' INDEX DIRECTORY = '/data/idx_sub2', SUBPARTITION s3 DATA DIRECTORY = '/data/data_sub2' INDEX DIRECTORY = '/data/idx_sub2' ), PARTITION p2 VALUES LESS THAN MAXVALUE ( SUBPARTITION s4 DATA DIRECTORY = '/data/data_sub3' INDEX DIRECTORY = '/data/idx_sub3', SUBPARTITION s5 DATA DIRECTORY = '/data/data_sub3' INDEX DIRECTORY = '/data/idx_sub3' ) );
2. Diviser les sous-partitions
CREATE TABLE tb_sub_dirnew (id INT, purchased DATE) ENGINE='MYISAM' PARTITION BY RANGE( YEAR(purchased) ) SUBPARTITION BY HASH( TO_DAYS(purchased) ) ( PARTITION p0 VALUES LESS THAN (1990) DATA DIRECTORY = '/data/data' INDEX DIRECTORY = '/data/idx' ( SUBPARTITION s0 DATA DIRECTORY = '/data/data_sub1' INDEX DIRECTORY = '/data/idx_sub1', SUBPARTITION s1 DATA DIRECTORY = '/data/data_sub1' INDEX DIRECTORY = '/data/idx_sub1' ), PARTITION p1 VALUES LESS THAN (2000) DATA DIRECTORY = '/data/data' INDEX DIRECTORY = '/data/idx' ( SUBPARTITION s2 DATA DIRECTORY = '/data/data_sub2' INDEX DIRECTORY = '/data/idx_sub2', SUBPARTITION s3 DATA DIRECTORY = '/data/data_sub2' INDEX DIRECTORY = '/data/idx_sub2' ), PARTITION p2 VALUES LESS THAN MAXVALUE DATA DIRECTORY = '/data/data' INDEX DIRECTORY = '/data/idx' ( SUBPARTITION s4 DATA DIRECTORY = '/data/data_sub3' INDEX DIRECTORY = '/data/idx_sub3', SUBPARTITION s5 DATA DIRECTORY = '/data/data_sub3' INDEX DIRECTORY = '/data/idx_sub3' ) );
Vous pouvez également spécifier un chemin pour une partition, puis spécifier un chemin pour la sous-partition, mais cela n'a aucun sens. car l'existence des données est déterminée par la sous-partition.
Remarque :
1. Le chemin spécifié doit exister, sinon la partition ne peut pas être créée avec succès
2. Le moteur de stockage et les fichiers d'index sont stockés dans des bases de données distinctes, vous pouvez donc définir des chemins distincts pour les fichiers de données et les fichiers d'index. Le moteur de stockage INNODB ne peut définir que des chemins de données
.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!