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

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. 基于CUDA实现立方体贴图 (Cubemaps) 转换为全景图 (Equirectangular Panorama)
  2. 想知道Java程序如何才能提高性能吗?
  3. java 生成 防伪码,优秀的生成防伪码的代码应该如何写?百万千万量级别的。
  4. python编程入门经典实例-总算明了python编程入门经典实例
  5. C语言再学习 -- 输入/输出
  6. 12.04 深圳站 | Serverless Developer Meetup 开放报名
  7. app遍历——appCrawler的使用
  8. 安徽工业大学计算机学院推免名单,2021年安徽工业大学拟录取推免研究生名单公示...
  9. [Xcode 实际操作]六、媒体与动画-(6)使用UIBlurEffect给图片添加模糊效果
  10. 理解C# 4 dynamic(2) – ExpandoObject的使用
  11. 笔记本 cpu 参数
  12. SQLite3中的数据类型
  13. 《计算机网络》学习笔记 ·002【物理层】
  14. PHP Curl 多线程实现
  15. redis 基础知识
  16. 宽字节UTF-8、多字节互转
  17. NMAP 端口扫描工具下载 + 安装
  18. 南开大学外国语言学及应用语言学专业(学硕)考研上岸经验分享
  19. MMA7455加速度传感器测量角度
  20. Arduino ide配置esp32硬件支持(配置esp32的arduino开发环境)

热门文章

  1. day002血字的研究
  2. 2022山东省安全员A证操作证考试题库模拟考试平台操作
  3. 子域名劫持漏洞详解、挖掘和防护
  4. ural 1069. Prufer Code
  5. mysql7.6安装_CentOS7.6离线安装MySql5.7
  6. Map获取key的数组
  7. rest assured
  8. zip分卷压缩的步骤_Python3实现zip分卷压缩过程解析
  9. 《美国职业橄榄球大联盟》:NFL·王牌四分卫
  10. 晚上的笔记:p2p vod