MySQL分区表

作者: 猪肉楠 | 来源:发表于2017-02-19 18:30 被阅读103次

确认mysql是否支持分区表

show plugins;
    如果结果出现partition 的 status 为 ACTIVE,则说明支持,如果不支持,请重新编译安装mysql

mysql分区表的特点

在逻辑上为一个表,但在物理上存储在多个文件
    非分区表有两个文件.frm、.ibd,数据文件和建表文件
    分区表有一个.frm文件,多个.ibd文件,如
        table_name#P#p0.ibd
        table_name#P#p1.ibd
        table_name#P#p2.ibd
        table_name#P#p3.ibd

创建mysql数据表为hash表

#省略普通建表语句,在后边加上
    PARTITION BY HASH(customer_id) PARTITIONS 4;

常用mysql分区的类型

1、按HASH分区
        根据MOD(分区键,分区数)的值把数据航存储到表的不同分区内
        数据可以平均的分布在各个分区
        HASH分区的键值必须是一个INT类型的值,或者是通过函数可以转为INT类型
        创建mysql数据表为hash分区表
            在普通的建表语句后加上PARTITION BY HASH(field_name) PARTITIONS 4;其中字段类型必须为整型。
            如果字段类型为TIMESTAMP型,则可以通过PARTITION BY HASH(UNIX_TIMESTAMP(field_name)) PARTITIONS 4;来进行分区建立。
2、按RANGE分区
        根据分区键值的范围把数据行存储到表的不同分区中
        多个分区的范围要连续,但是不能重叠
        默认情况下使用VALUES LESS THAN属性,既每个分区不包括指定的那个值
        创建mysql数据表为range分区表
            PARTITION BY RANGE (field_name)(
                    PARTITION p0 VALUES LESS THAN (10000),
                    PARTITION p1 VALUES LESS THAN (20000),
                    PARTITION p2 VALUES LESS THAN (30000),
                    PARTITION p3 VALUES LESS THAN MAXVALUE #如果没有此分区,则插入40000的时候会报错
            );
        range分区的使用场景
            分区键为日期或是时间类型
            所有查询中都包括分区键
            定期按分区范围清理历史数据
3、按LIST分区的特点
        按分区键取值的列表进行分区
        同范围分区一样,各分区的列表值不能重复
        每一行数据必须恩那个找到对于的分区列表,否则数据插入失败
        创建mysql数据表为list分区表
            PARTITION BY LIST (field_name) (
                PARTITION p0 VALUES in (1,3,5,7,9),
                PARTITION p1 VALUES in (2,4,6,8)
            );
            #插入10,会报错

分区表在日志类表中的应用

1、使用range分区
2、以login_time(登录时间)作为分区键
3、创建语句,在建表语句后加,按年分区
    PARTITION BY RANGE (YEAR(login_time)) (
        PARTITION p0 VALUES LESS THAN (2015),
        PARTITION p1 VALUES LESS THAN (2016),
        PARTITION p2 VALUES LESS THAN (2017)
);
4、查看分区使用情况
    SELECT table_name,partition_name,partition_description,table_rows FROM information_schema.'partitions' WHERE table_name='分区表名';
5、注意事项
    为了避免插入数据到range分区失败,要做修改并添加分区的计划任务
6、添加分区
    ALTER TABLE table_name ADD PARTITION (PARTITION p4 LESS THAN (2018));
7、删除过期数据(p0)、如果用delete,则非常耗时并且会锁定。
    ALTER TABLE table_name DROP PARTITION p0;    
8、过期数据归档
    要求:
        mysql>=5.7、表结构相同、归档到的数据表一定要是非分区表、非临时表且不能有外键约束、归档引擎是archive 
    步骤
        建立一个和分区表结构相同的非分区表,引擎改为archive
        ALTER TABLE table_name exchange PARTITION p1 WITH TABLE archive_table_name;#执行归档交换迁移
        完成迁移后,将迁移的分区进行删除,参考第7条
9、注意事项
    结合业务场景选择分区键,避免跨分区查询
    对分区表进行查询最好在where从句中包含分区键,以利用分区加快效率
    具有主键或唯一索引的表,主键或唯一索引必须是分区键的一部分,所以比较适用于myisam引擎

DB规划

1、为以后数据库迁移提供方便,能够方便的拆分数据库
2、避免跨库操作,把经常一起关联查询的表放到一个DB中
3、为了方便识别表所在的DB,在表明前增加库名前缀。

相关文章

  • MySQL分区表

    确认mysql是否支持分区表 mysql分区表的特点 创建mysql数据表为hash表 常用mysql分区的类型 ...

  • MySQL-分区表

    MySQL-分区表 分区表(于MySQL 5.1引入,v 5.5后可以逐步考虑用于生产环境) 是一个独立的逻辑表,...

  • Mysql 分区表

    MySQL分区表支持RANGE,LIST,HASH,KEY,COLUMNS多种分区算法。 分区表的唯一索引和主键索...

  • MySQL版本

    MySQL版本对比 服务器性能 1.mysql,percona mysql,mariadb均开源,支持分区表,My...

  • pg inherit

    借助表的继承特性PostgreSQL实现了分区表功能,虽然相比Oracle、MySQL的分区表来说其实现过程比较麻...

  • mysql分区表

    首先检查Mysql服务器是否支持分区表: mysql>show plugins 如果显示有partition项,那...

  • hive的严格模式和分区

    相比mysql,hive有严格模式存在,为了不错误扫描整个数据,hive的分区表会将数据分成几个分区。查询分区表中...

  • Mysql 分区表删除

    分区表删除部分分区 使用场景:从 MySQL 5.1 开始,支持分区 创建日志表时建议使用分区方式 在上表的分区表...

  • mysql分区表测试

    mysql分区表测试 mysql部署情况 使用docker-compose在10.xx.xx.1机器进行部署, 端...

  • MySQL的分区、分表、集群、优化

    MySQL的分区 MySQL分区表是在数据库层面,MySQL自己实现的分表功能,在很大程度上简化了分表的难度。物理...

网友评论

    本文标题:MySQL分区表

    本文链接:https://www.haomeiwen.com/subject/eddjwttx.html