Mysql分区表使用

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 一、什么是分区表 分区表就是按一定规则将一张表分割成多个部分,达到和物理分表同样的效果,但操作起来更 简单,不同于物理分表那样使用时还需要指定使用的数据表。对于使用者来说和操作普通表无差别。 二、优势与限制 1、优势 分区可以在一个表中存储比单个磁盘或文件系统分区上的数据更多的数据,因为我们可 以将

Mysql分区表使用


一、什么是分区表


分区表就是按一定规则将一张表分割成多个部分,达到和物理分表同样的效果,但操作起来更 简单,不同于物理分表那样使用时还需要指定使用的数据表。对于使用者来说和操作普通表无差别。


二、优势与限制


1、优势


  • 分区可以在一个表中存储比单个磁盘或文件系统分区上的数据更多的数据,因为我们可 以将分区表存储在不同物理磁盘上;
  • 对于大表数据,可以快速删除指定分区上的数据,效率比普通表delete高很多;
  • 查询的时候,如果where子句中包含分区列,则会减少IO,提升查询效率;
  • 对于大表尤其是innodb引擎的表,进行count()或sum()查询时,可以分区并行查询,提高效率;


2、限制


  • 如果分区字段中有主键或者唯一索引列,那么所有主键列和唯一索引列都必须包含进 来,如果表中有主键或唯一索引,那么分区键必须是主键或唯一索引;
  • 分区函数限制,目前mysql仅支持以下分区函数:ABS()、CEILING()、DATEDIFF()、 DAY()、DAYOFMONTH()、DAYOFWEEK()、DAYOFYEAR()、EXTRACT()、FLOOR()、 HOUR()、MICROSECOND()、MINUTE()、MOD()、MONTH()、QUARTER()、SECOND()、 TIME_TO_SEC()、TO_DAYS()、TO_SECONDS()、UNIX_TIMESTAMP()、WEEKDAY()、YEAR()、 YEARWEEK();
  • 所有分区上的数据库引擎要一致;
  • 一张表可以设置8192个分区。


三、分区类型


1、RANGE分区


基于一个给定连续区间范围,把数据分配到不同的分区;

CREATE TABLE r1 ( 
    a INT,
    b INT 
)
PARTITION BY RANGE (a) (
PARTITION p0 VALUES LESS THAN (5), 
PARTITION p1 VALUES LESS THAN (MAXVALUE)
);

2、LIST分区


类似RANGE分区,区别在LIST分区是基于枚举出的值列表分区,RANGE是基于给定连续区间范围分区;

CREATE TABLE customers_1 ( 
    first_name VARCHAR(25), 
    last_name VARCHAR(25), 
    street_1 VARCHAR(30), 
    street_2 VARCHAR(30), 
    city VARCHAR(15),
    renewal DATE 
)
PARTITION BY LIST COLUMNS(city) (
PARTITION pRegion_1 VALUES IN('xian', 'chengdu', 'chongqing'), 
PARTITION pRegion_2 VALUES IN('shijiazhuang', 'tianjin', 'beijing'), 
PARTITION pRegion_3 VALUES IN('hangzhou', 'nanjing')
);

3、HASH分区


基于用户定义的表达式返回值来选择分区,该表达式对要插入到表的行中列值操作。

PS:表达式必须返回整型数据。


CREATE TABLE employees (
    id INT NOT NULL,
    fname VARCHAR(30),
    lname VARCHAR(30),
    hired DATE NOT NULL DEFAULT '1970-01-01', 
    separated DATE NOT NULL DEFAULT '9999-12-31', 
    job_code INT,
    store_id INT )
PARTITION BY HASH(store_id) PARTITIONS 4;


4、KEY分区


类似HASH分区,但是HASH分区允许使用用户自定义表达式,而KEY分区不允许,它需要使用 MySQL服务器提供的HASH函数,同时HASH分区只支持整数分区,而KEY分区支持除BLOB和 TEXT类型外其他列;


PS:KEY分区对列数据进行hash运算所以有时候数据分布会非常不均匀。


CREATE TABLE k1 (
    id INT NOT NULL PRIMARY KEY, 
    name VARCHAR(20)
)
PARTITION BY KEY() PARTITIONS 2;


如果不指定列,mysql会自动使用主键或者唯一健所在的列。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5月前
|
分布式计算 DataWorks 关系型数据库
实时数仓 Hologres产品使用合集之如何将MySQL数据初始化到分区表中
实时数仓Hologres的基本概念和特点:1.一站式实时数仓引擎:Hologres集成了数据仓库、在线分析处理(OLAP)和在线服务(Serving)能力于一体,适合实时数据分析和决策支持场景。2.兼容PostgreSQL协议:Hologres支持标准SQL(兼容PostgreSQL协议和语法),使得迁移和集成变得简单。3.海量数据处理能力:能够处理PB级数据的多维分析和即席查询,支持高并发低延迟查询。4.实时性:支持数据的实时写入、实时更新和实时分析,满足对数据新鲜度要求高的业务场景。5.与大数据生态集成:与MaxCompute、Flink、DataWorks等阿里云产品深度融合,提供离在线
|
4月前
|
存储 关系型数据库 数据库
MySQL设计规约问题之是否可以使用分区表
MySQL设计规约问题之是否可以使用分区表
|
5月前
|
存储 关系型数据库 MySQL
MySQL 分区表
MySQL 分区表
51 4
|
5月前
|
分布式计算 DataWorks 关系型数据库
DataWorks产品使用合集之当需要将数据从ODPS同步到RDS,且ODPS表是二级分区表时,如何同步所有二级分区的数据
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
59 7
|
5月前
|
存储 监控 关系型数据库
MySQL普通表转换为分区表实战指南
MySQL普通表转换为分区表实战指南
|
5月前
|
存储 关系型数据库 MySQL
MySQL分区表:万字详解与实践指南
MySQL分区表:万字详解与实践指南
|
5月前
|
存储 关系型数据库 MySQL
【MySQL技术内幕】4.8-分区表
【MySQL技术内幕】4.8-分区表
110 0
|
传感器 关系型数据库 MySQL
php语句:MySQL指定分区表跨分区根据时间条件快速查询记录的封装函数
php语句:MySQL指定分区表跨分区根据时间条件快速查询记录的封装函数
135 0
|
6月前
|
监控 负载均衡 关系型数据库
MySQL技能完整学习列表13、MySQL高级特性——1、分区表(Partitioning)——2、复制(Replication)——3、集群(Clustering)
MySQL技能完整学习列表13、MySQL高级特性——1、分区表(Partitioning)——2、复制(Replication)——3、集群(Clustering)
90 0
|
存储 关系型数据库 MySQL
MySQL分区表详解
在我们日常处理海量数据的过程中,如何有效管理和优化数据库一直是一个既重要又具有挑战性的问题
128 0