MySQL分区路径子分区再分区


Posted in MySQL onApril 13, 2022

介绍

可以针对分区表的每个分区指定各自的存储路径,对于innodb存储引擎的表只能指定数据路径,因为数据和索引是存储在一个文件当中,对于MYISAM存储引擎可以分别指定数据文件和索引文件,一般也只有RANGE、LIST分区、sub子分区才有可能需要单独指定各个分区的路径,HASH和KEY分区的所有分区的路径都是一样。RANGE分区指定路径和LIST分区是一样的,这里就拿LIST分区来做讲解。

一、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'
);

注意:MYISAM存储引擎的数据文件和索引文件是分库存储所以可以为数据文件和索引文件定义各自的路径,INNODB存储引擎只能定义数据路径。

二、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'
  
);

MySQL分区路径子分区再分区

指定路径之后在原来的路径中innodb生成了4个指向数据存储的路径文件,myisam生成了一个th.par文件指明该表是分区表,同时数据文件和索引文件指向了实际的存储路径。

三、子分区

1.子分区

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'
        )
    );

MySQL分区路径子分区再分区

2.子分区再分

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'
        )
    );

也可以给个分区指定路径后再给子分区指定路径,但是这样没有意义,因为数据的存在都是由子分区决定的。

注意:

1.指定的路径必须存在,否则分区无法创建成功

2.MYISAM存储引擎的数据文件和索引文件是分库存储所以可以为数据文件和索引文件定义各自的路径,INNODB存储引擎只能定义数据路径

总结

通过给各个分区指定各自的磁盘可以有效的提高读写性能,在条件允许的情况下是一个不错的方法。

到此这篇关于MySQL分区之指定各分区路径的文章就介绍到这了!

MySQL 相关文章推荐
MySQL 使用SQL语句修改表名的实现
Apr 07 MySQL
MySQL 如何分析查询性能
May 12 MySQL
.Net Core导入千万级数据至Mysql的步骤
May 24 MySQL
MYSQL主从数据库同步备份配置的方法
May 26 MySQL
MySQL注入基础练习
May 30 MySQL
MySQL8.0无法启动3534的解决方法
Jun 03 MySQL
MySQL里面的子查询的基本使用
Aug 02 MySQL
WINDOWS 64位 下安装配置mysql8.0.25最详细的教程
Mar 22 MySQL
你真的会用Mysql的explain吗
Mar 31 MySQL
Mysql超详细讲解死锁问题的理解
Apr 01 MySQL
MySQL提取JSON字段数据实现查询
Apr 22 MySQL
MySQL外键约束(Foreign Key)案例详解
Jun 28 MySQL
MySQL创建管理子分区
Apr 13 #MySQL
MySQL创建管理KEY分区
Apr 13 #MySQL
MySQL创建管理HASH分区
Apr 13 #MySQL
MySQL创建管理RANGE分区
Apr 13 #MySQL
MySQL创建管理LIST分区
Apr 13 #MySQL
MySql分区类型及创建分区的方法
Apr 13 #MySQL
深入理解mysql事务隔离级别和存储引擎
You might like
在PHP中利用wsdl创建标准webservice的实现代码
2011/12/07 PHP
smarty表格换行实例
2014/12/15 PHP
php上传图片客户端和服务器端实现方法
2015/03/30 PHP
利用PHP自动生成印有用户信息的名片
2016/08/01 PHP
php指定长度分割字符串str_split函数用法示例
2017/01/30 PHP
php制作基于xml的RSS订阅源功能示例
2017/02/08 PHP
PHP设计模式之装饰器模式定义与用法简单示例
2018/08/13 PHP
PHP dirname(__FILE__)原理及用法解析
2020/10/28 PHP
jQuery+jsp下拉框联动获取本地数据的方法(附源码)
2015/12/03 Javascript
学习JavaScript设计模式之装饰者模式
2016/01/19 Javascript
通过npm引用的vue组件使用详解
2017/03/02 Javascript
150行Node.js实现的dns代理工具
2019/08/02 Javascript
JS常用排序方法实例代码解析
2020/03/03 Javascript
Python编程之属性和方法实例详解
2015/05/19 Python
简单讲解Python中的数字类型及基本的数学计算
2016/03/11 Python
Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程
2016/06/14 Python
基于Python socket的端口扫描程序实例代码
2018/02/09 Python
Python OpenCV读取png图像转成jpg图像存储的方法
2018/10/28 Python
Python实现的各种常见分布算法示例
2018/12/13 Python
Python读写文件基础知识点
2019/06/10 Python
python实现引用其他路径包里面的模块
2020/03/09 Python
Python try except异常捕获机制原理解析
2020/04/18 Python
python中如何使用虚拟环境
2020/10/14 Python
Python代码覆盖率统计工具coverage.py用法详解
2020/11/25 Python
python 基于PYMYSQL使用MYSQL数据库
2020/12/24 Python
使用css实现android系统的loading加载动画
2019/07/25 HTML / CSS
使用postMessage让 iframe自适应高度的方法示例
2019/10/08 HTML / CSS
优秀毕业生求职信范文
2014/01/02 职场文书
模范家庭事迹材料
2014/02/10 职场文书
项目投资建议书
2014/05/16 职场文书
写字楼租赁意向书
2014/07/30 职场文书
初中班级口号霸气押韵
2015/12/24 职场文书
数据库的高级查询六:表连接查询:外连接(左外连接,右外连接,UNION关键字,连接中ON与WHERE的不同)
2021/04/05 MySQL
OpenCV-Python实现人脸磨皮算法
2021/06/07 Python
mysql 数据插入优化方法之concurrent_insert
2021/07/01 MySQL
宝塔更新Python及Flask项目的部署
2022/04/11 Python