专栏首页Java学习网MySQL数据库,浅谈MySQL分区表优点和限制

MySQL数据库,浅谈MySQL分区表优点和限制

分区是将一个表的数据按照某种方式,逻辑上仍是一个表,也就是所谓的分区表。分区引入了分区键的概念,分区键用于根据某个区间值(或者范围值)、特定值列表或者hash函数值执行数据的聚集,让数据根据规则分布在不同的分区中,让一个大对象变成一些小对象,从而实现对数据的分化管理。作为MySQL数据库中的一个重要机制,MySQL分区表优点和限制也是一目了然的,然而又能够同时实现共存。

一、我们先来看MySQL分区表优点:

1、与单个磁盘或文件系统分区相比,可以存储更多的数据。

2、对于那些已经失去保存意义的数据,通常可以通过删除与那些数据有关的分区,很容易地删除那些数据。相反地,在某些情况下,添加新数据的过程又可以通过为那些新数据专门增加一个新的分区,来很方便地实现。

3、一些查询可以得到极大的优化,这主要是借助于满足一个给定WHERE语句的数据可以只保存在一个或多个分区内,这样在查找时就不用查找其他剩余的分区。因为分区可以在创建了分区表后进行修改,所以在第一次配置分区方案时还不曾这么做时,可以重新组织数据,来提高那些常用查询的效率。

4、通过跨多个磁盘来分散数据查询,来获得更大的查询吞吐量。

二、 说完了MySQL分区表优点,我们再来说说MySQL分区表限制。

1、因为需要根据分区列来确定数据所在分区,所以分区列必须作为查询条件, 如果不使用分区列的查询条件,那么就无法进行分区过滤,Mysql最终会扫描所有分区。

2、所有分区都必须使用相同的存储引擎。

3、某些存储引擎不支持分区(MERGE、CSV、FEDERATED)。

4、一张表最多只能有1024个分区。

5、分区表中无法对非分区列建立唯一索引(Unique Index)。

6、分区表中无法使用外键。

7 、打开并锁住所有底层表的成本可能很高。

当查询访问分区表的时候,MySQL需要打开并锁住所有的底层表,这是分区表的另一个开销。这个操作在分区过滤之前发生,所以无法通过分区过滤降低此开销,并且该开销也和分区类型无关,会影响所有的查询。

8、维护分区的成本可能很高

某些分区维护操作的速度会非常快,例如新增或者删除分区。而有些操作,例如充足分区或类似alter语句的操作;这类操作需要赋值数据。重组分区的原理与alter类似,先创建一个临时的分区,然后将数据赋值到其中,然后在删除原分区。

9、分区的字段,必须是表上所有的唯一索引(或者主键索引)包含的字段的子集。一个表上有一个或者多个唯一索引的情况下,分区的字段必须被包含在所有的主键或者唯一索引字段中。

10、分区键非NULL约束

如果分区键所在列没有notnull约束,如果是range分区表,那么null行将被保存在范围最小的分区。如果是list分区表,那么null行将被保存到list为0的分区。

在按HASH和KEY分区的情况下,任何产生NULL值的表达式mysql都视同它的返回值为0。为了避免这种情况的产生,建议分区键设置成NOT NULL。

以上就是为大家罗列出的MySQL分区表的优点和限制,我们不难看出尽管MySQL分区表有着十分出众的优点,但其本身存在的限制也是很多的,这就需要我们通过不断的改善和发展技术来实现MySQL分区表的发展。

本文分享自微信公众号 - Java学习网(javalearns),作者:javalearns

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-05-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • BAT最新Java面试题汇总:并发编程+JVM+Spring+分布式+缓存等!

    今天给大家分享下我整理的Java架构面试专题及答案,其中大部分都是大企业面试常问的面试题,可以对照这查漏补缺,当然了,这里所列的肯定不可能覆盖全部方式,不过也希...

    javaworld
  • BAT最新Java面试题汇总:并发编程+JVM+Spring+分布式+缓存等!

    今天给大家分享下我整理的Java架构面试专题及答案,其中大部分都是大企业面试常问的面试题,可以对照这查漏补缺,当然了,这里所列的肯定不可能覆盖全部方式,不过也希...

    美的让人心动
  • 后台开发常问面试题集锦(问题搬运工,文末附问题链接)

    Synchronized(对象锁)和Static Synchronized(类锁)的区别

    Java架构技术
  • MySQL数据库建表、优化、算法、分区分库分表总结

    1、因为任何有业务含义的列都有改变的可能性,主键一旦带上了业务含义,那么主键就有可能发生变更。主键一旦发生变更,该数据在磁盘上的存储位置就会发生变更,有可能会引...

    chenchenchen
  • 2018最新淘宝面试出炉:分布式锁+集群+一致Hash算法+底层技术原理

    1.Java基础还是需要掌握牢固,重点会问HashMap等集合类,以及多线程、线程池等。

    欧阳愠斐
  • 为什么你精通CRUD,却搞不懂数据库的基本原理?

    作为一个程序员,不了解数据库怎么能行,那么数据库到底是个啥呢,作为一个Java工程师,平时和数据库打交道着实不少,所谓的CRUD其实就是对数据库进行增删改查的操...

    黄小斜学Java
  • 精通CRUD,却搞不懂数据库的基本原理?

    作为一个程序员,不了解数据库怎么能行,那么数据库到底是个啥呢,作为一个Java工程师,平时和数据库打交道着实不少,所谓的CRUD其实就是对数据库进行增删改查的操...

    Java技术江湖
  • 提高系统性能的常见方式缓存,也可以有很多种不同的玩法

    非常抱歉哈,前几天休清明节,一直在开车,顺道看了一场开心麻花的节目《谈判专家》,一直认为喜剧是外表喜性人的天堂,现在才知道美女也可以演的这么搞笑。尤其是朱迪的大...

    哲洛不闹
  • 这一份MySQL书单,可以帮你搞定90%以上的面试题!

    经过了10多年的发展,Java Web从开发框架到社区都已经非常成熟,很多程序员都可以通过使用框架很快速地搭建起一个Java Web应用,特别是近几年Sprin...

    程序员书单

扫码关注云+社区

领取腾讯云代金券