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

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

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

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

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

4、涉及到例如SUM()和COUNT()这样聚合函数的查询,可以很容易地进行并行处理。这种查询的一个简单例子如 “SELECT salesperson_id, COUNT (orders) as order_total FROM sales GROUP BY salesperson_id;”。通过“并行”,这意味着该查询可以在每个分区上同时进行,最终结果只需通过总计所有分区得到的结果。

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

二、 说完了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。

11、分区键必须是INT类型,或者通过表达式返回INT类型,可以为NULL。唯一的例外是当分区类型为KEY分区的时候,可以使用其他类型的列作为分区键( BLOB or TEXT 列除外)。

12、只有RANG和LIST分区能进行子分区,HASH和KEY分区不能进行子分区。

以上就是为大家罗列出的MySQL分区表的优点和限制,我们不难看出尽管MySQL分区表有着十分出众的优点,但其本身存在的限制也是很多的,这就需要我们通过不断的改善和发展技术来实现MySQL分区表的发展。在本站的MySQL教程中还有很多MySQL分区表背后的故事和发展的历史,感兴趣的小伙伴可以去看看,一般情况下,了解一下我们所学知识的背景和历史还是有必要的。

mysql分区表的好处_浅谈MySQL分区表优点和限制相关推荐

  1. mysql 计划任务消耗_浅谈MySQL event 计划任务

    一.查看event是否开启 show variables like '%sche%'; set global event_scheduler =1; 二. -- 设置时区并设置计划事件调度器开启,也可 ...

  2. mysql表空间大小_浅谈mysql中各种表空间(tablespaces)的概念

    mysql中,会涉及到各种表空间的概念,虽然,很多方面这些概念和Oracle有相似性,但也有很多不同的地方,初学者很容易被这些概念弄的晕头转向,从而,混淆这些概念的区别和理解,下面,就简要介绍和说明一 ...

  3. mysql表的类型_浅谈MySQL表类型

    MySQL为我们提供了很多表类型供选择,有MyISAM.ISAM.HEAP.BerkeleyDB.InnoDB,MERGE表类型,萝卜白菜各有所爱是不假,可是真正选择何种表类型还是要看业务需要啊,每一 ...

  4. mysql 添加唯一索引_浅谈Mysql索引

    文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. 我们都知道,数据库索引可以帮助我们更加快速的找出符合的数据,但是如果不使用索引,Mysql则会从第一条开始查询 ...

  5. mysql共享锁使用方法_浅谈Mysql共享锁、排他锁、悲观锁、乐观锁及其使用场景...

    Mysql共享锁.排他锁.悲观锁.乐观锁及其使用场景 一.相关名词 |--表级锁(锁定整个表) |--页级锁(锁定一页) |--行级锁(锁定一行) |--共享锁(S锁,MyISAM 叫做读锁) |-- ...

  6. .net mysql limit 分页原理_浅谈MySQL分页Limit的性能问题

    MySQL的分页查询通常通过limit来实现.limit接收1或2个整数型参数,如果是2个参数,第一个是指定第一个返回记录行的偏移量,第二个是返回记录行的最大数目.初始记录行的偏移量是0.为了与Pos ...

  7. mysql 用户通配符_浅谈mysql通配符进行模糊查询的实现方法

    在mysql数据库中,当我们需要模糊查询的时候 ,我们会使用到通配符. 首先我们来了解一下2个概念,一个是操作符,一个是通配符. 操作符 like就是SQL语句中的操作符,它的作用是指示在SQL语句后 ...

  8. mysql declare与set的区别_浅谈MySQL存储过程中declare和set定义变量的区别

    在存储过程中常看到declare定义的变量和@set定义的变量.简单的来说,declare定义的类似是局部变量,@set定义的类似全局变量. 1.declare定义的变量类似java类中的局部变量,仅 ...

  9. mysql维护计划任务_浅谈MySQL event 计划任务

    一.查看event是否开启 show variables like '%sche%'; set global event_scheduler =1; 二. -- 设置时区并设置计划事件调度器开启,也可 ...

最新文章

  1. BufferedWriter
  2. idl结果显示窗口如何缩小_IDL操作步骤
  3. Swing如何正确的处理界面中的线程(EDT)
  4. 轻松实现Access数据导入Oracle!
  5. 成都Uber优步司机奖励政策(4月24日)
  6. HashMap源码解读
  7. Java中List的contains方法,你用对了吗?
  8. 码说 | 并查集(以HDU1232为例)
  9. ffmpeg 推流同时录像命令_ffmpeg推流命令
  10. Chirpy Zippy工具使用心得
  11. WHY数学表达式的3D可视化
  12. vue 引入自定义js方法并调用
  13. python程序语言二级教程_计算机二级python学习教程(2) python语言基本语法元素...
  14. 科密t1消费管理系统_科密t1消费管理系统
  15. Python自然语言处理 8 分析句子结构
  16. 邓白氏编码邮件10个问题
  17. C++STL常用算法adjacent_find
  18. 利用高频信号改变钢丝磁性来实现大量存储信息的钢丝录音机
  19. 电线带电时先接零线还是火线
  20. 支付宝花呗额度一直不涨?阿里老员工说出原因,亲测有效

热门文章

  1. 无人之疆 - 坝上草原,锡林郭勒,克什克腾
  2. 【调剂】北京信息科技大学机械工程硕士(学硕、专硕)学位点2023年招收全日制学位硕士研究生与专业硕士研究生,拟接收调剂...
  3. 0049算法笔记——【随机化算法】蒙特卡罗算法,主元素问题,素数测试问题
  4. 山东师范大学计算机专业几本,山东师范大学属于几本
  5. 从“名将之路”到“写作之路”
  6. CSS基础面试题精选
  7. Springboot模板引擎
  8. 清华大学计算机系李昂,李昂:爱思考的东北大男孩
  9. 基于jeecgboot的flowable流程支持退回到发起人节点表单修改功能
  10. mysql revoke 列权限_MYSQL用户权限管理(Grant,Revoke)