Maison >base de données >tutoriel mysql >Introduction détaillée à MySQL précisant le chemin de chaque partition

Introduction détaillée à MySQL précisant le chemin de chaque partition

迷茫
迷茫original
2017-03-26 14:08:571341parcourir

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.

1. Moteur de stockage MYISAM

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.

2. Moteur de stockage INNODB

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.

3. Sous-partition

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!

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