暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL的学习-分区表①

原创 张伟垚 2020-08-17
781

分区概述

分区引入分区键 Partition Key,根据此键使数据规则的分布在不同的分区中。
分区优点:
1、 和单个磁盘或者文件系统分区相比,能存储更多数据
2、 优化查询,在where子句中包含分区条件条件时,可以只扫描特定的分区提高查询效率。如果遇到SUM()和COUNT()这类聚合函数的查询时,可以容易地在各个分区上并行处理
3、 对于需要删除的数据,可以通过删除分区快速删除
4、 跨磁盘分散数据查询,获得更大的查询吞吐量
在Mysql 5.7以后,同一个分区表的所有分区必须同一个存储引擎。分区数量不能超过8192,NDB除外。

create table emp(empid int,salary decimal(7,2),birth_date date)
engine=innodb
partition by hash(month(birth_date))
partitions 6;

MySQL的分区适用一个表中的所有数据和索引,不能只对表数据或者索引进行分区。也不能只对一部分数据进行分区。分区表上的索引一定是本地LOCAL索引。

分区分类

RANG分区:给定连续范围,分区键必须INT类型。
LIST分区:给定枚举值,分区键必须INT类型。
COLUMNS分区:分区键可以多列,也可以非整数。
HASH分区:给定分区数,基于HASH算法分配。分区键必须INT类型。
KEY分区:给定分区数,基于MySql的的HASH算法分配。
子分区:复合或者组合分区,主分区下再进行分区。

所有分区类型,分区表上没有主键或者唯一键,否则必须作为分区键。

大小写敏感

image.png
关于库名和表名大小写敏感。
lower_case_file_system不可修改的变量,表示操作系统是否大小写敏感,OFF代表敏感,ON代表不敏感。
lower_case_table_names代表数据库的库名和表名是否大小写敏感,1表示敏感,0表示不敏感。

如果操作系统敏感,那么数据库表名和库名是否敏感由lower_case_table_names决定。
如果操作系统不敏感,那么lower_case_table_names应该设置为1,即不敏感。
但是无论以上参数如何设置,列名,别名,分区名这些是不区分大小写的。

RANGE分区

create table zwy_test(
id int not null,
ename varchar(30),
hired DATE not null default ‘1970-01-01’,
separated DATE not null default ‘9999-12-31’,
job varchar(30) not null,
store_id int not null
)
partition by range(store_id)
(
partition p0 values less than(10),
partition p1 values less than(20),
partition p2 values less than(30)
);

image.png
这种情况就是超过该range范围包含的区域,可以通过加入VALUES LESS THAN MAXVALUE。

alter table zwy_test add partition (partition p3 values less than maxvalue);
image.png
适用场景:
1、 删除数据时,删除一个分区比delete更有效率。
2、 可以根据包含分区键的查询语句,仅查询一个或者部分分区,提高查询效率。

LIST分区

每个分区对应一个枚举的集合,只能输入这些指定的值。

create table list_test(
id int not null,
name varchar(30),
store_id int not null default 0
)
partition by list(store_id)(
partition p1 values in (3,5,6,9,17),
partition p2 values in (1,2,10,11,19,20),
partition p3 values in (4,12,13,14,18),
partition p4 values in (7,8,15,16)
);

image.png
插入未指定的值报错。
image.png

image.png
通过information_schema的PARTITIONS可以查看数据库中分区表的信息,以上插入的一行在指定的分区内。

PS:以上均为个人学习之后的理解,如有错误,恳请指正。
学习来源:《深入浅出MySQL第三版》

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论