mysql分区表的好处_浅谈MySQL分区表优点和限制
分区是将一个表的数据按照某种方式,逻辑上仍是一个表,也就是所谓的分区表。分区引入了分区键的概念,分区键用于根据某个区间值(或者范围值)、特定值列表或者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分区表优点和限制相关推荐
- mysql 计划任务消耗_浅谈MySQL event 计划任务
一.查看event是否开启 show variables like '%sche%'; set global event_scheduler =1; 二. -- 设置时区并设置计划事件调度器开启,也可 ...
- mysql表空间大小_浅谈mysql中各种表空间(tablespaces)的概念
mysql中,会涉及到各种表空间的概念,虽然,很多方面这些概念和Oracle有相似性,但也有很多不同的地方,初学者很容易被这些概念弄的晕头转向,从而,混淆这些概念的区别和理解,下面,就简要介绍和说明一 ...
- mysql表的类型_浅谈MySQL表类型
MySQL为我们提供了很多表类型供选择,有MyISAM.ISAM.HEAP.BerkeleyDB.InnoDB,MERGE表类型,萝卜白菜各有所爱是不假,可是真正选择何种表类型还是要看业务需要啊,每一 ...
- mysql 添加唯一索引_浅谈Mysql索引
文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. 我们都知道,数据库索引可以帮助我们更加快速的找出符合的数据,但是如果不使用索引,Mysql则会从第一条开始查询 ...
- mysql共享锁使用方法_浅谈Mysql共享锁、排他锁、悲观锁、乐观锁及其使用场景...
Mysql共享锁.排他锁.悲观锁.乐观锁及其使用场景 一.相关名词 |--表级锁(锁定整个表) |--页级锁(锁定一页) |--行级锁(锁定一行) |--共享锁(S锁,MyISAM 叫做读锁) |-- ...
- .net mysql limit 分页原理_浅谈MySQL分页Limit的性能问题
MySQL的分页查询通常通过limit来实现.limit接收1或2个整数型参数,如果是2个参数,第一个是指定第一个返回记录行的偏移量,第二个是返回记录行的最大数目.初始记录行的偏移量是0.为了与Pos ...
- mysql 用户通配符_浅谈mysql通配符进行模糊查询的实现方法
在mysql数据库中,当我们需要模糊查询的时候 ,我们会使用到通配符. 首先我们来了解一下2个概念,一个是操作符,一个是通配符. 操作符 like就是SQL语句中的操作符,它的作用是指示在SQL语句后 ...
- mysql declare与set的区别_浅谈MySQL存储过程中declare和set定义变量的区别
在存储过程中常看到declare定义的变量和@set定义的变量.简单的来说,declare定义的类似是局部变量,@set定义的类似全局变量. 1.declare定义的变量类似java类中的局部变量,仅 ...
- mysql维护计划任务_浅谈MySQL event 计划任务
一.查看event是否开启 show variables like '%sche%'; set global event_scheduler =1; 二. -- 设置时区并设置计划事件调度器开启,也可 ...
最新文章
- BufferedWriter
- idl结果显示窗口如何缩小_IDL操作步骤
- Swing如何正确的处理界面中的线程(EDT)
- 轻松实现Access数据导入Oracle!
- 成都Uber优步司机奖励政策(4月24日)
- HashMap源码解读
- Java中List的contains方法,你用对了吗?
- 码说 | 并查集(以HDU1232为例)
- ffmpeg 推流同时录像命令_ffmpeg推流命令
- Chirpy Zippy工具使用心得
- WHY数学表达式的3D可视化
- vue 引入自定义js方法并调用
- python程序语言二级教程_计算机二级python学习教程(2) python语言基本语法元素...
- 科密t1消费管理系统_科密t1消费管理系统
- Python自然语言处理 8 分析句子结构
- 邓白氏编码邮件10个问题
- C++STL常用算法adjacent_find
- 利用高频信号改变钢丝磁性来实现大量存储信息的钢丝录音机
- 电线带电时先接零线还是火线
- 支付宝花呗额度一直不涨?阿里老员工说出原因,亲测有效
热门文章
- 无人之疆 - 坝上草原,锡林郭勒,克什克腾
- 【调剂】北京信息科技大学机械工程硕士(学硕、专硕)学位点2023年招收全日制学位硕士研究生与专业硕士研究生,拟接收调剂...
- 0049算法笔记——【随机化算法】蒙特卡罗算法,主元素问题,素数测试问题
- 山东师范大学计算机专业几本,山东师范大学属于几本
- 从“名将之路”到“写作之路”
- CSS基础面试题精选
- Springboot模板引擎
- 清华大学计算机系李昂,李昂:爱思考的东北大男孩
- 基于jeecgboot的flowable流程支持退回到发起人节点表单修改功能
- mysql revoke 列权限_MYSQL用户权限管理(Grant,Revoke)