【SQL应知应会】表分区(四)• MySQL版

news2024/11/29 21:43:11

请添加图片描述

欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享,与更多的人进行学习交流

本文收录于SQL应知应会专栏,本专栏主要用于记录对于数据库的一些学习,有基础也有进阶,有MySQL也有Oracle

请添加图片描述

分区表 • MySQL版

  • 前言
  • 一、分区表
  • 1.非分区表
  • 2.分区表
    • 2.1 概念
    • 2.2 MySQL数据库表分区
      • 2.2.1 InnoDB 逻辑存储结构
    • 2.3 MySQL数据库分区的由来
    • 2.4 为什么对表进行分区?
    • 2.5 MySQL的分区形式
    • 2.6 MySQL分区的类型
    • 2.7 MySQL分区代码
        • 2.7.5.3 range-key 复合分区
        • 2.7.5.4 list - key 复合分区
    • 2.8 常见分区操作
      • 2.8.1 删除分区
      • 2.8.2 增加分区
      • 2.8.3 分解分区
      • 2.8.4 合并分区
      • 2.8.5 重新定义分区
      • 2.8.6 重建分区
      • 2.8.7 检查分区
      • 2.8.8 修补分区
    • 2.9 MySQL分区表的局限性
      • 2.9.1 错误示例
      • 2.9.2 错误修正
  • 小结

前言

在前面的内容中,【SQL应知应会】表分区(一)• MySQL版、【SQL应知应会】表分区(二)• MySQL版、【SQL应知应会】表分区(三)• MySQL版中,已经完成了MySQL的表分区方面的大部分知识的学习,如为什么对表进行分区,分区有哪些形式,分区有哪些类型以及每一种类型的语句,分区的注意事项以及适用场景,并且用例子代码演示了MySQL的各种分区

今天这篇内容,将继续进行讲述MySQL的表分区的后续内容,主要包括常见的分区操作,如删除分区、增加分区、分解分区、合并分区、重新定义分区、重建分区、 检查分区、修补分区,不但使用代码进行演示,并且补充了一些需要注意的内容;今天还讲到了MySQL分区表的局限性,其中直接使用错误示例帮助大家更直接明了的看到错误的原因,并且展示了错误修正后的代码

希望文章的内容对大家有所帮助,如果有什么不足的地方,大家可以在评论区或者私信我,感谢大家的支持
那么,快拿出你的电脑,跟着文章一起学习起来吧

一、分区表

1.非分区表

👉:传送门💖非分区表构💖

2.分区表

2.1 概念

👉:传送门💖概念💖

2.2 MySQL数据库表分区

2.2.1 InnoDB 逻辑存储结构

👉:传送门💖InnoDB 逻辑存储结构💖

2.2.2 段(segment)
2.2.3 区(extent)
2.2.4 页(page)

2.3 MySQL数据库分区的由来

👉:传送门💖MySQL数据库分区的由来💖

2.4 为什么对表进行分区?

👉:传送门💖为什么对表进行分区💖

2.4.1 表分区要解决的问题
2.4.2 表分区有如下优点

2.5 MySQL的分区形式

👉:传送门💖MySQL的分区形式💖

2.5.1 水平分区(HorizontalPartitioning)
2.5.2 垂直分区(VerticalPartitioning)

2.6 MySQL分区的类型

2.6.1 range分区 👉:传送门💖range分区💖
2.6.2 list分区(列表分区)
2.6.3 hash分区
2.6.4 KEY表分区
2.6.5 多字段分区(range、list)
2.6.6 分区注意事项及适用场景
👉:传送门💖2.6.2 ~ 2.6.6💖

2.7 MySQL分区代码

2.7.1range分区
2.7.2list分区
👉:传送门💖2.7.1~ 2.7.2💖
2.7.3 hash表分区
2.7.4 key表分区
2.7.5复合分区
2.7.5.1 range-hash(范围哈希)复合分区
2.7.5.2 list-hash(列表哈希)复合分区
👉:传送门💖2.7.3 ~ 2.7.5💖

2.7.5.3 range-key 复合分区

## range-key 复合分区
create table foo_emp2 
(
    empno varchar(20) not null,
    empname varchar(20),
    deptno int,
    salary int 
)
partition by range(salary)
subpartition by key(deptno)
subpartitions 3
(	
    partition p1 values less than (2000),
    partition p2 values less than (3000)
)

insert into foo_emp2 select 1,1,20,1000 from dual

2.7.5.4 list - key 复合分区

## list - key 复合分区

create table empk(
    empno varchar(20) not null,
    empname varchar(20),
    deptno int,
    birthdate date not null,
    salary int 	
)
partition by list(deptno)
subpartition by key(birthdate)
subpartitions 3
(	
    partition p1 values in (10),
    partition p2 values in (20)
)

2.8 常见分区操作

在这里插入图片描述

2.8.1 删除分区

alter table emp drop partition p1
## 不能删除hash或者key分区
  • 一次性删除多个分区
alter table emp drop partition p1,p2
  • 删除表的所有分区
alter table emp remove partitioning; -- 不会丢失数据

2.8.2 增加分区

  • 增加范围分区
    • 范围分区一般只能往后增加,往前增加一般得reorganize重新组织分区或者Oracle的split分区
### 范围分区一般只能往后增加,往前增加一般得reorganize重新组织分区或者Oracle的split分区
alter table emp add partition(partition 3 values less than (4000))
-- 增加完4000的,是否可以增加一个3500?
   -- 不可以,因为4000之前的已经划分完了
  • 增加列表分区
alter table emp1 add partition(partiton 3 value in (40))
-- 如果前面的list分区中,主分区有3个子分区,那么新增加的这个也会自动给配3个子分区

2.8.3 分解分区

  • Reorganize partition关键字可以对表的部分分区或全部分区进行修改,并且不会丢失数据
  • 分解前后分区的整体范围应该一致
alter table te
reorignize partition p1 into
( 
    partition p1 values less than (100),
    partition p3 values less than (1000)
); -- 不会丢失数据

2.8.4 合并分区

  • Merge分区:把2个分区合并为1个
alter table te
reorganize partition p1,p3 into
(
    partition p1 values less than (1000)
) -- 不会丢失数据

2.8.5 重新定义分区

  • 重新定义hash分区表
alter table emp partition by hash(salary) partitions 7;
-- 不会丢失数据
  • 重新定义range分区表
alter table emp partition by range(salary)
(
    partition p1 values less than (2000),
    partition p2 values less than (4000)
) -- 不会丢失数据

2.8.6 重建分区

  • 这和先删除保存在分区中的所有记录,然后重新插入它们,具有同样的效果
  • 可用于整理分区碎片
alter table emp rebuild partition p1,p2;

2.8.7 检查分区

  • 可以使用几乎与对非分区表使用check table相同的方式检查分区
  • 这个命令可以告知表emp的分区p1,p2中的数据或索引是否已经被破坏,若发生了这种情况,使用修补命令
alter table emp check partition p1,p2;

2.8.8 修补分区

# 修补被破坏的分区
alter table emp repairpartition p1,p2

2.9 MySQL分区表的局限性

  • 在5.1版本中分区表对唯一约束有明确的规定,每一个唯一约束必须包含中分区表的分区键(也包括主键约束)

2.9.1 错误示例

报错:MySQL Database Error:A PRIMARY KEY must include allcolums in the tables partitioning function

create table emptt(
	empno varchar(20) not null,
    empname varchar(20),
    deptno int,
    birthdate date not null,
    salary int,
    primary key(empno)
)
partition by range(salary) -- 这样的语句会出错:MySQL Database Error:A PRIMARY KEY must include allcolums in the tables partitioning function
(
    partition p1 values less than (100),
    partition p2 values less than (200)
)

2.9.2 错误修正

create table emptt(
	empno varchar(20) not null,
    empname varchar(20),
    deptno int,
    birthdate date not null,
    salary int,
    primary key(empno,salary) -- 在主键中加入salary列就正常
)
partition by range(salary)
(
    partition p1 values less than (100),
    partition p2 values less than (200)
)

小结

感谢大家耐心的看完这篇文章,对于SQL在表分区的知识点,我们在MySQL方面已经有四篇内容了,如果大家觉着还算可以,那么就给个三连支持一下吧,如果想要继续关注和学习后续更多的内容,就关注一下爱书不爱输的程序猿吧,当然,如果大家还有什么其他方面的知识点想要看,可以在评论区或者私信我

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/768879.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

系统学习Linux-SSH远程服务(二)

概念 安全外壳协议,提供安全可靠的远程连接 特点 ssh是工作在传输层和应用层的协议 ssh提供了一组管理命令 ssh 远程登陆 scp 远程拷贝 sftp 远程上传下载 ssh-copy-id ssh keygen 生成 提供了多种身份验证机制 身份验证机制 密码验证 需要提供密码 密…

vue element select下拉框回显展示数字

vue element select下拉框回显展示数字 问题截图&#xff1a; 下拉框显示数字可以从数据类型来分析错误&#xff0c;接收的数据类型是字符串&#xff0c;但是value是数字类型 <el-form-item prop"classifyLabelId" :label"$t(item.classifyLabelId)"…

051、事务设计之TiDB事务实现方式

事务在TiDB中的存储 分布式事务 提交的第一阶段&#xff0c;会用三个CF 来存放这些数据信息&#xff0c; 一类列簇对应一类键值对&#xff0c; 第一个CF(default)存放的是数据 的键值对。第二个存放的是锁信息。 第三个对应的是提交信息。 put<3_100,Frank> 3_100: prim…

LeetCode·每日一题·1851. 包含每个查询的最小区间·优先队列(小顶堆)

题目 示例 思路 离线查询&#xff1a; 输入的结果数组queries[]是无序的。如果我们按照输入的queries[]本身的顺序逐个查看&#xff0c;时间复杂度会比较高。 于是&#xff0c;我们将queries[]数组按照数值大小&#xff0c;由小到大逐个查询&#xff0c;这种方法称之为离线查询…

Go语言之接口(interface)

1.1 、多态的含义 在java里&#xff0c;多态是同一个行为具有不同表现形式或形态的能力&#xff0c;即对象多种表现形式的体现&#xff0c;就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定&#xff0c;而是在程序运行期间才确定&am…

T5模型: Transfer Text-to-Text Transformer(谷歌)

&#x1f525; T5由谷歌发表于2019&#xff0c;《Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer》&#xff0c;最终版本发布在&#xff1a;JMLR。 一句话总结T5: 大一统模型&#xff0c;seq2seq形式完成各类nlp任务&#xff0c;大数据集…

Docker 的前世今生:从社区到市场,从领域到技术应用的全方位分析

博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客&#x1f466;&#x1f3fb; 《java 面试题大全》 &#x1f369;惟余辈才疏学浅&#xff0c;临摹之作或有不妥之处&#xff0c;还请读者海涵指正。☕&#x1f36d; 《MYSQL从入门到精通》数据库是开发者必会基础之…

下载编译Chromium

参考&#xff1a;Mac上本地编译Chrome浏览器踩坑笔记&#xff08;2021.02最新&#xff09; - 掘金 For Mac: 一、下载编译工具链&#xff1a;deptool git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git export PATH"$PATH:/Users/yumlu/co…

jib进行本地打包,并上传本地镜像仓库

使用 Jib 进行本地打包和上传到本地镜像仓库是一种方便的方式&#xff0c;而无需编写 Dockerfile。Jib 是一个开源的 Java 容器镜像构建工具&#xff0c;它可以直接将 Java 项目打包为镜像&#xff0c;并将其推送到容器镜像仓库。 gradle 进行jib的配置 import java.time.Zon…

第53步 深度学习图像识别:Bottleneck Transformer建模(Pytorch)

基于WIN10的64位系统演示 一、写在前面 &#xff08;1&#xff09;Bottleneck Transformer "Bottleneck Transformer"&#xff08;简称 "BotNet"&#xff09;是一种深度学习模型&#xff0c;在2021年由Google的研究人员在论文"Bottleneck Transfor…

MaxCompute与 Mysql 之单字段转多行

在实际数据处理中&#xff0c;可能会遇到行列转换的数据处理&#xff0c;在 MaxCompute 与 AnalyticDB MySQL 数据处理与转换 介绍过如多行转一行&#xff0c;本篇主要介绍将逗号分割的字段转成多行。 一、MaxCompute 实现方式 在MaxCompute中有TRANS_ARRAY函数&#xff0c;可…

显示一行或两行多出的文字用省略号代替

以上就是一行的效果&#xff0c;超出宽度就用...代替 .recommendContainer .scrollItem text{/* 单行文本溢出隐藏 省略号代替 */display: block;white-space: nowrap; /*溢出不换行*/overflow: hidden; /*溢出隐藏*/text-overflow: ellipsis; /*溢出的内容已...代替*/} 多…

watch中监听vuex中state改变监听不到

watch中监听vuex中state改变监听不到 https://blog.csdn.net/aliven1/article/details/100581529?utm_mediumdistribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0-100581529-blog-122614448.t5_layer_targeting_sa&spm1001.2101.3001.4242…

软通动力与华秋达成生态共创合作,共同推动物联网硬件创新

7月11日&#xff0c;在2023慕尼黑上海电子展现场&#xff0c;软通动力信息技术(集团)股份有限公司(以下简称“软通动力”)与深圳华秋电子有限公司(以下简称“华秋”)签署了生态共创战略合作协议&#xff0c;共同推动物联网硬件生态繁荣发展。当前双方主要基于软通动力的产品及解…

从Vue2到Vue3【二】——Composition API(第二章)

系列文章目录 内容链接从Vue2到Vue3【零】Vue3简介及创建从Vue2到Vue3【一】Composition API&#xff08;第一章&#xff09; 文章目录 系列文章目录前言一、 生命周期二、hook三、toRef以及toRefs总结 前言 Vue3作为Vue.js框架的最新版本&#xff0c;引入了许多令人激动的新…

vue项目部署自动检测更新

前言 当我们重新部署前端项目的时候&#xff0c;如果用户一直停留在页面上并未刷新使用&#xff0c;会存在功能使用差异性的问题&#xff0c;因此&#xff0c;当前端部署项目后&#xff0c;需要提醒用户有去重新加载页面。 在以往解决方案中&#xff0c;不少人会使用websocke…

C#基础--委托

C#基础–委托 C#基础–委托 简单说它就是一个能把方法当参数传递的对象,而且还知道怎么调用这个方法,同时也是粒度更小的“接口”(约束了指向方法的签名) 一、什么是委托,委托的本质是什么? 跟方法有点类似,有参数,返回值,访问修饰符+ delegate public delegate void …

Python 算法基础篇:哈希表与散列函数

Python 算法基础篇&#xff1a;哈希表与散列函数 引用 1. 哈希表的概念2. 散列函数的概念 a ) 一致性 b ) 均匀性 c ) 高效性 3. 散列函数的实现4. 哈希表的实现5. 哈希表的冲突解决 a ) 链地址法 b ) 开放地址法 6. 实例演示实例&#xff1a;电话簿 总结 引用 哈希表是一种高…

[计算机入门] 文件夹(目录)及路径

2.7 文件夹(目录)及路径 文件夹&#xff08;folder、目录&#xff09;是一种用于存储和组织文件和其他文件夹的容器。它可以包含任意数量的文件和子文件夹&#xff0c;并且可以通过拖放、复制和粘贴等操作来移动、复制和管理这些文件和子文件夹。 Windows文件夹可以帮助用户更…

spring复习:(43)使用TransactionProxyFactoryBean来实现事务时,事务是怎么开启的?

一、配置文件&#xff1a; <bean id"myFactoryBean"class"org.springframework.transaction.interceptor.TransactionProxyFactoryBean"><property name"transactionManager" ref"transactionManager" /><property nam…