首页 > 数据库 > MySQL > 正文

MySQL分区教学

2024-07-24 12:32:36
字体:
来源:转载
供稿:网友
       MySQL分区学习:

一、      分区概述
       分区是一种表设计模式,自5.1版本开始支持分区,逻辑上是一张表,物理上可能是多个对象。其中MyISAM、INNODB、NDB等存储引擎都支持分区,但CSV、MERGE、FEDORATED不支持分区。
 
1.      分区种类
水平分区:对表记录进行拆分,同一表的不同行记录分配到不同的物理文件中。
 
         Range 分区:行根据基于属于一个给定连续区间的列值放入分区,自MYSQL5.5开始支持列范围分区,最常用的分区。
 
         List分区:和Range分区一样,只是List分区是面对离散值,自MYSQL5.5开支支持列List分区。
 
         Hash分区:根据用户自定义的表达式的返回值进行分区,返回值不能为负数。
 
         Key分区:根据MYSQL数据库提供的散列函数来进行分区。
 
 
 
垂直分区:对表字段进程拆分(MYSQL暂不支持),同一表中不同的列分配在不同的物理文件中。
 
 
 
2.      分区优、缺点
优点:
 
         可极大提高查询效率;
 
         主要用于数据库的高可用性,方便管理;
 
 缺点:
 
         无论何种分区,如果表中存在主键或者唯一键索引,分区列必须是唯一索引的一个组成部分。
 
 
 
二、      分区类型详解
1.      Range分区
 create table t_range(id int)
 
partition by range(id)
 
(partition p0 values less than (100),
 
partition p1 values less than(500),
 
partition p2 values less than maxvalue );
 
 
 
insert into t_range values(10),(120),(600);
 
 (root:localhost:Sat Jul  8 20:05:12 2017)[dbtest]> /! ls -lnrth /home/mysql/dbtest
 
total 320K
 
-rw-rw---- 1 500 500   61 Mar 17 15:58 db.opt
 
-rw-rw---- 1 500 500   32 Jul  8 20:04 t_range.par               ##存储分区信息
 
-rw-rw---- 1 500 500 8.4K Jul  8 20:04 t_range.frm
 
-rw-rw---- 1 500 500  96K Jul  8 20:05 t_range#P#p2.ibd
 
-rw-rw---- 1 500 500  96K Jul  8 20:05 t_range#P#p1.ibd
 
-rw-rw---- 1 500 500  96K Jul  8 20:05 t_range#P#p0.ibd
 
 
 
(root:localhost:Sat Jul  8 20:14:13 2017)[(none)]> select * from information_schema.partitions where table_name='t_range' /G
 
*************************** 1. row ***************************
 
                TABLE_CATALOG: def
 
                 TABLE_SCHEMA: dbtest
 
                   TABLE_NAME: t_range
 
               PARTITION_NAME: p0
 
            SUBPARTITION_NAME: NULL
 
   PARTITION_ORDINAL_POSITION: 1
 
SUBPARTITION_ORDINAL_POSITION: NULL
 CREATE_TIME: NULL
 
                  UPDATE_TIME: NULL
 
                   CHECK_TIME: NULL
 
                     CHECKSUM: NULL
 
            PARTITION_COMMENT:
 
                    NODEGROUP: default
 
              TABLESPACE_NAME: NULL
 
*************************** 2. row ***************************
 
                TABLE_CATALOG: def
 
                 TABLE_SCHEMA: dbtest
 
                   TABLE_NAME: t_range
 
               PARTITION_NAME: p1
 
            SUBPARTITION_NAME: NULL
 
   PARTITION_ORDINAL_POSITION: 2
 
SUBPARTITION_ORDINAL_POSITION: NULL
 
             PARTITION_METHOD: RANGE
 
          SUBPARTITION_METHOD: NULL
 
         PARTITION_EXPRESSION: id
 
      SUBPARTITION_EXPRESSION: NULL
 
        PARTITION_DESCRIPTION: 500
 
                   TABLE_ROWS: 1
 
               AVG_ROW_LENGTH: 16384
 
                  DATA_LENGTH: 16384
 
              MAX_DATA_LENGTH: NULL
 
                 INDEX_LENGTH: 0
 
                    DATA_FREE: 0
 
                  CREATE_TIME: NULL
 
                  UPDATE_TIME: NULL
 
                   CHECK_TIME: NULL
 
 
 
3 rows in set (0.00 sec)

(编辑:武林网)

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表