MYSQL初级知识——SQL分区,分表,分库
树图思维导图提供 SQL分区,分表,分库 在线思维导图免费制作,点击“编辑”按钮,可对 SQL分区,分表,分库 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:0040701ba18a7c24e0b06684df414b70
SQL分区,分表,分库思维导图模板大纲
是什么?
一般情况下,创建的表对应一组存储文件,使用MyISAM存储引擎时是一个 .MYI 和 .MYD 文件,使用InnoDB存储引擎时是一个 .ibd 和 .frm(表结构)文件。
当数据量较大时(千万条级别以上),MySQL性能会开始下降,这时就需要将数据分散到多组存储文件,保证单个文件的执行效率。
能做什么?
逻辑数据分割;
提高单一文件的写和读应用速度;
提高分区范围读查询的速度;
分割数据能够有多个不同的物理文件路径;
高效的保存历史数据;
怎么操作?
查看当前数据库是否支持分区
SHOW VARIABLES LIKE '%partition%'; -- 5.6及之前版本
show plugins; -- 5.6版本
分区类型
Range 分区
List 分区
Hash 分区
Key 分区
垂直拆分
垂直分表,通常是按照业务功能的使用频次,把主要的、热门的字段放在一起作为主表。把不常用的,按照各自的业务属性进行聚集,拆分到不同的次要表中。主表和次要表的关系一般都是一对一的。
水平拆分(数据分片)
单表的容量不超过500W,否则建议水平拆分。是把一个表复制成同样表结构的不同表,然后把数据按照一定的规则划分,分别存储到这些表中,从而保证单表的容量不会太大,提升性能;当然这些结构一样的表,可以放在一个或多个数据库中。
水平分割的几种方法
使用MD5哈希
按时间划分
按热度划分
按ID值划分
为什么要分库?
数据库集群环境后,都是多台slave,基本满足了读取操作;但是写入或大数据、频繁的写入操作,对master性能影响就比较大,这个时候单库并不能解决大规模并发写入的问题,需要考虑分库。
分库是什么?
一个库里表太多了,导致了海量数据,系统性能下降,把原本存储于一个库的表拆分存储到多个库上,通常是将表按照功能模块、关系密切程度划分出来,部署到不同的库上。
优点
减少增量数据写入时的锁,对查询的影响;
由于单表数量下降,常见的查询操作由于减少了需要扫描的记录,使得单表单词查询所需的检索行数变少,减少磁盘IO,延时变短;
分库分表后的难题?
分布式事务的问题,数据完整性和一致性的问题;
数据操作维度问题:用户、交易、订单各个不同的维度;
跨库联合查询的问题,可能需要两次查询跨节点的count、order by、 group by 以及聚合函数问题。可能需要分别在各个节点上得到结果后,在应用程序端进行合并处理,增加额外的数据管理负担;
树图思维导图提供 分析传统文化进行创新设计的优秀作品 在线思维导图免费制作,点击“编辑”按钮,可对 分析传统文化进行创新设计的优秀作品 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:b10e0023950f5b8b1cd58ca2e19944cc
树图思维导图提供 Li River--Beautiful Water and Mountains 在线思维导图免费制作,点击“编辑”按钮,可对 Li River--Beautiful Water and Mountains 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:690a608b69a3b300c4507d9cae90acde