java mysql 分区表_mysql分区表

java mysql 分区表_mysql分区表对用户来说,分区表是一个独立的逻辑表,但是底层由多个物理子表组成。实现分区的代码实际上是对一组底层表的句柄对象的封装。mysql在创建表时使用PARTITIONBY子句定义每个分区存放的数据。在执行查询的时候,优化器会根据分区定义过滤那些没有我们需要数据的分区,这样查询就无须扫描所有分区——只需要查询包含需要数据的分区就可以了。分区的一个主要目的是将数据按照一个较粗的粒度分在不同的表中,这样做可…

大家好,又见面了,我是你们的朋友全栈君。

对用户来说,分区表是一个独立的逻辑表,但是底层由多个物理子表组成。实现分区的代码实际上是对一组底层表的句柄对象的封装。

mysql在创建表时使用PARTITION BY子句定义每个分区存放的数据。在执行查询的时候,优化器会根据分区定义过滤那些没有我们需要数据的分区,这样查询就无须扫描所有分区——只需要查询包含需要数据的分区就可以了。

分区的一个主要目的是将数据按照一个较粗的粒度分在不同的表中,这样做可以将相关的数据放在一起,另外,如果想一次批量删除整个分区的数据也会变得很方便。

在下面的场景中,分区可以起到非常大的作用:

1.表非常大以至于无法全部都放在内存中,或者只在表的最后部分有热点数据,其他均是历史数据。

2.分区表的数据更容易维护。例如想批量删除大量数据可以使用清除整个分区的方式。另外,还可以对一个独立分区进行优化、检查、修复等操作。

3.分区表的数据可以分布在不同的物理设备上,从而高效地利用多个硬件设备。

4.可以使用分区表来避免某些特殊的瓶颈,例如InnoDB的单个索引的互斥访问,ext3文件系统的inode锁竞争等。

5.如果需要,还可以备份和恢复独立的分区,这在非常大的数据集的场景下效果非常好。

分区表本身也有一些限制,下面是其中比较重要的几点:

1.一个表最多只能有1024个分区。

2.在mysql5.1中,分区表达式必须是整数,或者是返回整数的表达式。在mysql5.5中,某些场景中可以直接使用列进行分区。

3.如果分区字段中有主键或者唯一索引的列,那么所有主键列和唯一索引列都必须包含进来。

4.分区表中无法使用外键约束。

分区表上的操作按照下面的操作逻辑进行:

select查询

当查询一个分区表的时候,分区层先打开并锁住所有的底层表,优化器先判断是否可以过滤部分分区,然后再调用对应的存储引擎接口访问各个分区的数据。

insert操作

当写入一条记录时,分区层先打开并锁住所有的底层表,然后确定哪个分区接收这条记录,再将记录写入对应底层表。

delete操作

当删除一条记录时,分区层先打开并锁住所有的底层表,然后确定数据对应的分区,最后对相应底层表进行删除操作。

update操作

当更新一条记录时,分区层先打开并锁住所有的底层表,mysql先确定需要更新的记录在哪个分区,然后取出数据并更新,再判断更新后的数据在哪个分区,最后对底层进行写入操作,并对原数据所在的底层表进行删除操作。

虽然每个操作都有“先打开并锁住所有的底层表”,但这并不是说分区表在处理过程中是锁住全表的。如果存储引擎能够自己实现行级锁,例如innoDb,则会在分区层释放对应表锁。这个加锁和解锁过程与普通InnoDB上的查询类似。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/134183.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 前端VSCode常用插件「建议收藏」

    前端VSCode常用插件「建议收藏」前端VSCode常用插件1.Chinese(Simplified)vscode下载完毕是英文版的,先安装这个插件,改为中文版,所以是我们第一个安装的插件。2.AutoRenameTag修改开始标签,结束标签跟着自动变化,比较好用。3.OneDarkPro颜色主题4.格式化代码(vscode系统自带)但是html标签嵌套比较多,可能需要自动格式化比较好,所以我们可以利用vscode自动的功能格式化代码,暂且不用格式化插件,自动保存照样能格式化代…

    2022年7月25日
    8
  • 大数据时代下数据挖掘技术的应用[通俗易懂]

    大数据时代下数据挖掘技术的应用[通俗易懂]原文链接:https://mp.weixin.qq.com/s/bxSEO4gKQ-BbDWT1BNnwyw随着社会信息化的迅速发展,无论是数据的变化速率,还是数据的新增种类都在不断更新,数据研究变得越来越复杂,这意味着“大数据时代”到来。2011年,互联网数据中心(internetdatacenter,IDC)将大数据重新定义为:在大数据原有的三维特征——数量、多样、速度基础上,增加了另…

    2022年6月15日
    82
  • 【我的Android进阶之旅】Android调用JNI出错 java.lang.UnsatisfiedLinkError: No implementation found for的解决方法「建议收藏」

    【我的Android进阶之旅】Android调用JNI出错 java.lang.UnsatisfiedLinkError: No implementation found for的解决方法「建议收藏」错误描述今天使用第三方的so库时候,调用JNI方法时出现了错误。报错如下所示:11-0116:39:20.9794669-4669/com.netease.xtc.cloudmusicE/art:Noimplementationfoundforvoidcom.netease.xtc.cloudmusic.utils.NeteaseMusicUtils.nativeInit(…

    2025年8月25日
    7
  • wget404错误_错误403谷歌

    wget404错误_错误403谷歌报错信息Resolvings3.ap-northeast-1.amazonaws.com(s3.ap-northeast-1.amazonaws.com)…52.219.8.176Connectingtos3.ap-northeast-1.amazonaws.com(s3.ap-northeast-1.amazonaws.com)|52.219.8.176|:443…connected.HTTPrequestsent,awaitingresponse…403Forbidden

    2025年5月27日
    2
  • idea2021.3.4激活码-激活码分享

    (idea2021.3.4激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~S32P…

    2022年3月26日
    725
  • 【原创】无锁编程技术及实现

    【原创】无锁编程技术及实现无锁编程技术及实现作者:jx(360电商技术组) 1.基于锁的编程的缺点 多线程编程是多CPU系统在中应用最广泛的一种编程方式,在传统的多线程编程中,多线程之间一般用各种锁的机制来保证正确的对共享资源(share resources)进行访问和操作。在多线程编程中只要需要共享某些数据,就应当将对它的访问串行化。比如像++count(count是整型变量)这样的简单操作也得加锁,因为即便是增量操作

    2022年5月1日
    34

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号