热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MySQL26分区表

什么是分区表分区表就是按照某种规则将同一张表的数据分段划分到多个位置存储。对数据的分区存储提高了数据库的性能,被分区存储的数据在物理上是多个文件,但在

什么是分区表

分区表就是按照某种规则将同一张表的数据分段划分到多个位置存储。对数据的分区存储提高了数 据库的性能,被分区存储的数据在物理上是多个文件,但在逻辑上仍然是一个表,对表的任何操作 都跟没分区之前一样。在执行增、删、改、查等操作时,数据库会自动找到对应的分区,然后执行 操作。

  • MySQL从5.1.3开始支持分区(Partition)。
  • 在MySQL 8.0中,只有InnoDB和NDB两个存储引擎支持分区。

分区表的好处


  • 存储更多:与单个磁盘或文件系统分区相比,可以存储更多的数据。
  • 提高查询吞吐:通过跨多个磁盘来分散数据查询,来获得更大的查询吞吐量。
  • 便于管理:很容易根据分区删除失去保存意义的历史数据。
  • 并行处理:涉及到sum()、count()等聚合函数的 查询,可以很容易进行并行处理。
  • 提升查询效率:一些查询可以极大地优化,查询仅从某个或某几个分区中获取数据。

分区表的四种类型

MySQL支持的分区类型包括Range、List、Hash和Key,其中Range最常用。

  • Range分区:允许将数据划分不同范围。例如可以将 一个表通过年份划分成若干个分区。
  • List分区:允许系统通过预定义的列表的值来对数 据进行分割。
  • Hash分区:允许通过对表的一个或多个列的Hash Key进行计算,最后通过这个Hash码不同数值对应的数据区域进行分区。
  • Key分区:对Hash模式的一种延伸,这里的Hash Key是MySQL系统产生的。

Range分区

Range分区是基于属于一个给定连续区间的列值,把多行分配给分区。

#Range分区示例
create table user_range(
id int not null auto_increment,
name varchar(30) ,
age int,
birthday date,
province int,
primary key(id, age)
)
# 主键必须包含分区字段。partition by RANGE(age) (
partition p1 VALUES LESS THAN (20) DATA DIRECTORY = '/var/local/data/p1',
partition p2 VALUES LESS THAN (40) DATA DIRECTORY = '/var/local/data/p2',
partition p3 VALUES LESS THAN (60) DATA DIRECTORY = '/var/local/data/p3',
partition p4 VALUES LESS THAN MAXVALUE DATA DIRECTORY = '/var/local/data/p4'
);

List分区

List分区是基于列值匹配一个离散值集合中的某个值来进行选择。

#List分区示例
create table user_list(
id int not null auto_increment, name varchar(30) ,
age int,
birthday date,
province int,
primary key(id, province)
)
partition by List(province) (
partition p1 VALUES IN (1,3,5,7,9,11,13,15,17,19,21), partition p2 VALUES IN (2,4,6,8,10,12,14,16,18,20,22), partition p3 VALUES IN (23,24,25,26,27,28,29,30,31,32,33,34)
);

Hash分区

Hash分区是基于用户定义的表达式的返回值来进行选择的分区。

#Hash分区示例
create table user_hash(
id int not null auto_increment,
name varchar(30) ,
age int,
birthday date,
province int,
primary key(id, birthday)
)
partition by HASH(YEAR(birthday)) partitions 5;

Key分区

Key分区类似于Hash分区,但这里的Hash Key是由MySQL系统产生的。

#Key分区示例
create table user_key(
id int not null auto_increment, name varchar(30) ,
age int,
birthday date,
province int,
primary key(id, age)
)
partition by KEY (age) partitions 5;

分区的其他操作

#新增分区
alter table `user` add partition(partition p5 VALUES LESS THAN MAXVALUE);
#对已存在的表进行分区
alter table `user` partition by RANGE(age) (
partition p1 VALUES LESS THAN (20) DATA DIRECTORY = 'c:/data/p1', partition p2 VALUES LESS THAN (40) DATA DIRECTORY = 'c:/data/p2', partition p3 VALUES LESS THAN (60) DATA DIRECTORY = 'c:/data/p3', partition p4 VALUES LESS THAN MAXVALUE DATA DIRECTORY = 'c:/data/p4'
);
#删除分区(分区下的数据也会被删除)
alter table `user` drop partition p5;
#移除分区(数据不会被删除)
ALTER TABLE `user` REMOVE PARTITIONING ;


推荐阅读
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • 本文介绍了在iOS开发中使用UITextField实现字符限制的方法,包括利用代理方法和使用BNTextField-Limit库的实现策略。通过这些方法,开发者可以方便地限制UITextField的字符个数和输入规则。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了游标的使用方法,并以一个水果供应商数据库为例进行了说明。首先创建了一个名为fruits的表,包含了水果的id、供应商id、名称和价格等字段。然后使用游标查询了水果的名称和价格,并将结果输出。最后对游标进行了关闭操作。通过本文可以了解到游标在数据库操作中的应用。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • EPPlus绘制刻度线的方法及示例代码
    本文介绍了使用EPPlus绘制刻度线的方法,并提供了示例代码。通过ExcelPackage类和List对象,可以实现在Excel中绘制刻度线的功能。具体的方法和示例代码在文章中进行了详细的介绍和演示。 ... [详细]
author-avatar
鬼鬼太子_157
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有