Mysql分区表使用

简介: 一、什么是分区表 分区表就是按一定规则将一张表分割成多个部分,达到和物理分表同样的效果,但操作起来更 简单,不同于物理分表那样使用时还需要指定使用的数据表。对于使用者来说和操作普通表无差别。 二、优势与限制 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会自动使用主键或者唯一健所在的列。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
分布式计算 DataWorks 关系型数据库
实时数仓 Hologres产品使用合集之如何将MySQL数据初始化到分区表中
实时数仓Hologres的基本概念和特点:1.一站式实时数仓引擎:Hologres集成了数据仓库、在线分析处理(OLAP)和在线服务(Serving)能力于一体,适合实时数据分析和决策支持场景。2.兼容PostgreSQL协议:Hologres支持标准SQL(兼容PostgreSQL协议和语法),使得迁移和集成变得简单。3.海量数据处理能力:能够处理PB级数据的多维分析和即席查询,支持高并发低延迟查询。4.实时性:支持数据的实时写入、实时更新和实时分析,满足对数据新鲜度要求高的业务场景。5.与大数据生态集成:与MaxCompute、Flink、DataWorks等阿里云产品深度融合,提供离在线
|
传感器 关系型数据库 MySQL
php语句:MySQL指定分区表跨分区根据时间条件快速查询记录的封装函数
php语句:MySQL指定分区表跨分区根据时间条件快速查询记录的封装函数
388 0
|
分布式计算 DataWorks 关系型数据库
DataWorks产品使用合集之当需要将数据从ODPS同步到RDS,且ODPS表是二级分区表时,如何同步所有二级分区的数据
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
462 7
|
存储 关系型数据库 MySQL
MySQL 分区表
MySQL 分区表
403 4
|
存储 关系型数据库 数据库
MySQL设计规约问题之是否可以使用分区表
MySQL设计规约问题之是否可以使用分区表
|
存储 监控 关系型数据库
MySQL普通表转换为分区表实战指南
MySQL普通表转换为分区表实战指南
|
存储 关系型数据库 MySQL
MySQL分区表:万字详解与实践指南
MySQL分区表:万字详解与实践指南
|
存储 关系型数据库 MySQL
【MySQL技术内幕】4.8-分区表
【MySQL技术内幕】4.8-分区表
738 0
|
监控 负载均衡 关系型数据库
MySQL技能完整学习列表13、MySQL高级特性——1、分区表(Partitioning)——2、复制(Replication)——3、集群(Clustering)
MySQL技能完整学习列表13、MySQL高级特性——1、分区表(Partitioning)——2、复制(Replication)——3、集群(Clustering)
286 0
|
存储 关系型数据库 MySQL
【MySQL】MySQL分区表详解
【MySQL】MySQL分区表详解
753 0

推荐镜像

更多