zoukankan      html  css  js  c++  java
  • MySQL分区表的管理~2

    一、维护分区

    对于表的维护,我们一般有如下几种方式: CHECK TABLE, OPTIMIZE TABLE, ANALYZE TABLE和REPAIR TABLE。

    而这几种方式,对于分区同样适用。下面,我们一一阐述各种的作用。

    1. Rebuilding partitions

    重建分区,它相当于先删除分区中的数据,然后重新插入。这个主要是用于分区的碎片整理。

    譬如:

    ALTER TABLE t1 REBUILD PARTITION p0, p1;

    2. Optimizing partitions

    该命令主要是用于回收空闲空间和分区的碎片整理。对分区执行该命令,相当于依次对分区执行 CHECK PARTITION, ANALYZE PARTITION,REPAIR PARTITION命令。

    譬如:

    ALTER TABLE t1 OPTIMIZE PARTITION p0, p1;

    注意:

    一些存储引擎,譬如InnoDB,并不支持基于分区的Optimizing。当你执行该命令时,会rebuild整张表,在 MySQL 5.6.9版本以上,执行该命令会导致整张表被rebuild和analyze。在这种情况下,建议直接使用 ALTER TABLE ... REBUILD PARTITION 或 ALTER TABLE ... ANALYZE PARTITION。

    3. Analyzing partitions

    读取和存储分区中值的分布情况

    ALTER TABLE t1 ANALYZE PARTITION p3;

    4.  Repairing partitions

    修复被破坏的分区

    ALTER TABLE t1 REPAIR PARTITION p0,p1;

    5. Checking partitions

    检查分区是否存在错误

    ALTER TABLE trb3 CHECK PARTITION p1;

    注意:

    1> mysqlcheck和myisamchk并不支持分区表

    2> 上述分区名也可用all替代,指的是对所有分区进行操作。

    3> ANALYZE, CHECK, OPTIMIZE, REBUILD, REPAIR和TRUNCATE命令并不适用于子分区。

    二、如何获取分区的相关信息

    1. 通过 SHOW CREATE TABLE 语句来查看分区表的分区子句

    譬如:

    复制代码
    mysql> show create table eG
    *************************** 1. row ***************************
           Table: e
    Create Table: CREATE TABLE `e` (
      `id` int(11) NOT NULL,
      `fname` varchar(30) DEFAULT NULL,
      `lname` varchar(30) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1
    /*!50100 PARTITION BY RANGE (id)
    (PARTITION p0 VALUES LESS THAN (50) ENGINE = InnoDB,
     PARTITION p1 VALUES LESS THAN (100) ENGINE = InnoDB,
     PARTITION p2 VALUES LESS THAN (150) ENGINE = InnoDB,
     PARTITION p3 VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */
    1 row in set (0.00 sec)
    复制代码

    2. 通过 SHOW TABLE STATUS 语句来查看表是否分区

    对应Create_options字段,譬如:

    复制代码
    mysql> show table statusG
    *************************** 1. row ***************************
               Name: e
             Engine: InnoDB
            Version: 10
         Row_format: Compact
               Rows: 6
     Avg_row_length: 10922
        Data_length: 65536
    Max_data_length: 0
       Index_length: 0
          Data_free: 0
     Auto_increment: NULL
        Create_time: 2015-12-07 22:26:06
        Update_time: NULL
         Check_time: NULL
          Collation: latin1_swedish_ci
           Checksum: NULL
     Create_options: partitioned
            Comment: 
    复制代码

    3. 查看 INFORMATION_SCHEMA.PARTITIONS表

    4. 通过 EXPLAIN PARTITIONS SELECT 语句查看对于具体的SELECT语句,会访问哪个分区。

    三、分区交换

    分区交换的语法如下:

    ALTER TABLE pt EXCHANGE PARTITION p WITH TABLE nt

    其中,pt是分区表,p是pt的分区(注:也可以是子分区),nt是目标表。

    其实,分区交换的限制还是蛮多的:

    1> nt不能为分区表

    2> nt不能为临时表

    3> nt和pt的结构必须一致

    4> nt不存在任何外键约束,即既不能是主键,也不能是外键。

    5> nt中的数据不能位于p分区的范围之外。

    具体可参考MySQL的官方文档

    http://dev.mysql.com/doc/refman/5.6/en/partitioning-management-exchange.html

  • 相关阅读:
    springboot springcloud zuul 过滤器
    springboot springcloud eureka 熔断器
    javaweb servlet filter
    maven nexus 搭建私服(二)
    springboot springcloud zuul 网关入门
    springboot springcloud 配置中心
    springboot springcloud eureka 入门
    java rabbitmq
    java jvm调优
    maven nexus 搭建私服(一)
  • 原文地址:https://www.cnblogs.com/ExMan/p/10395604.html
Copyright © 2011-2022 走看看