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

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上的查询类似。

java mysql 分区表_mysql分区表相关推荐

  1. mysql 创建分区表_Mysql分区表及自动创建分区Partition

    Range分区表建表语句如下,其中分区键必须和id构成主键和唯一键 CREATE TABLE `test1` ( `id` char(32) COLLATE utf8mb4_unicode_ci NO ...

  2. 如何创建mysql分区表_mysql分区表创建思路

    mysql分区表有range,list,hash,key,其中每个分区又有特殊的类型.对于RANGE分区,有RANGE COLUMNS分区.对于LIST分区,有LIST COLUMNS分区.对于HAS ...

  3. mysql普通标转分区表_MySQL分区表到普通表互转

    由于最近总有人抱怨,数据迁移后执行SQL变慢,经过查看原来是分区导致的问题.原分区根据按月设置RANGE分区, 看到这图的时候也许有人就会发现问题....... 业务查询SQL: 从SQL上看 执行计 ...

  4. mysql8分区表_MySQL 分区表

    MySQL分区就是将一个表分解为多个更小的表.从逻辑上讲,只有一个表或一个索引,但在物理上这个表或者索引可能由多个物理分区组成.每个分区在物理上都是独立的.MySQL数据库分区类型:Range分区:行 ...

  5. mysql5.7 分区表_mysql分区表学习

    一:怎样对已有数据的表进行表分区 可以直接alter table进行修改. 如: USE dba; ALTER TABLE t3 PARTITION BY RANGE(id) ( PARTITION ...

  6. java mysql 项目_mysql数据库如何实现与Java项目连接

    mysql数据库如何实现与Java项目连接 发布时间:2020-11-09 16:47:40 来源:亿速云 阅读:68 作者:Leah mysql数据库如何实现与Java项目连接?很多新手对此不是很清 ...

  7. java mysql主从复制_MySQL主从复制的实现过程

    一.什么是主从复制 将主数据库中的DDL和DML操作通过二进制日志传输到从数据库上,然后将这些日志重新执行(重做):从而使得从数据库的数据与主数据库保持一致. 二.主从复制的作用 1.主数据库出现问题 ...

  8. java mysql 全文索引_MySQL索引原理

    什么是索引? "索引"是为了能够更快地查询数据.比如一本书的目录,就是这本书的内容的索引,读者可以通过在目录中快速查找自己想要的内容,然后根据页码去找到具体的章节. 数据库也是一样 ...

  9. java mysql 更新_MySQL更新和删除数据

    1. 更新数据 更新数据 update customers set cust_email = 'elmer@fudd.com' where cust_id = 10005; 更新多列 update c ...

  10. java mysql大小写_MySQL大小写敏感的解决方案

    前言:对于MySQL的大小写敏感的影响,笔者在一个小项目中深刻的体会到:当想要查询一条数据时,总是出来两条或多条,后来发现是大小写敏感造成的原因,本文就该问题提出解决方案. 1.MySQL大小写敏感的 ...

最新文章

  1. nyoj 61 传纸条(一) (双线动归)nyoj 探寻宝藏
  2. grep 两个字符串_文本搜索神器Grep
  3. 循序渐进学习嵌入式开发技术
  4. ADO.NET2.0 Querying Large Result Sets Asynchronously(ADO.NET 异步操作)
  5. 自定义View----滑动刻度尺与流式布局 实例(四)
  6. blog转到CNBlog了
  7. 周题:UVa10736题。Foreign Exchange
  8. Quartz.NET 学习相关博客
  9. React Hooks 实战 CNode 社区移动端网站
  10. 关于dsoframer VC++下的使用
  11. 《CSS世界》--张鑫旭 : 前端样式高手进阶CSS
  12. 开源的在线视频点播系统,值得分享!
  13. 2017中兴算法挑战赛(迪杰斯特拉)
  14. 简述linux的系统组成,简述Linux系统结构
  15. 友豆火山CPG插件开发003-顶级对象
  16. 电脑pc页面在手机缩放显示
  17. 笔记本win10正在更新怎么关闭计算机,教你win10如何关闭自动更新
  18. 个人微信收款回调通知
  19. 打开网站被挂马跳转到博彩页面 解决办法
  20. 智能化助力抗疫新模式“场所码”实现精准防控

热门文章

  1. python无限循环小数_如何把一个无限循环小数转换成一个分数(算法)
  2. 免费查询IP的API
  3. 已知直线上两点求直线的一般式方程
  4. 自适应辛普森(Simpson)积分及二重积分
  5. 在nginx中使用proxy protocol协议
  6. 自学Java随时放弃(十二 控制跳转语句 ①break+②continue+③return)
  7. EPIC的服务器稳定吗,epic国内有服务器吗(epic服务器在哪)
  8. H3C模拟器安装及解决各种兼容性问题方法
  9. vue element-ui实现金额数字添加千分位并保留两位小数
  10. signature=c31ee9b23a444aeb59534b250024e5ac,Assembling unit for tube components