傻傻分不清楚的分区、分库、分表

一、分区

  1. MySQL 在 5.1 时添加了对 分区(即水平分区) 的支持。
  2. MySQL 的物理数据存储在表空间文件(.ibdata1和.ibd)中,分区 的意思是指将同一表中不同行的记录分配到不同的物理文件中。
  3. 有几个分区就有几个 .idb 文件。

二、分表

  1. 在 MySQL 5.1 的 分区 功能出现以前,要想解决超大表问题,只能采用分表操作,因为这类问题十分常见,MySQL 才自带了一个分区功能,以达到相同的效果。
  2. 分表类型
    • 水平分表
      水平分表和分区很像,或者说分区就是水平分表的数据库实现版本 ,它们分的都是行记录,就像用一把刀,水平的将一个表切成多张表一样。
    • 垂直分表
      垂直分表是基于列字段进行的。一般是表中的字段较多,或者有数据较大长度较长(比如text,blob,varchar(1000)以上的字段)的字段时,我们将不常用的,或者数据量大的字段拆分到"扩展表"上。这样避免查询时,数据量太大造成的"跨页"问题。

三、分区和分表的区别

  1. 分区只是一张表中的数据和索引的存储位置发生改变,分表则是将一张表分成多张表,是真实的有多套表的配套文件。
  2. 分区没法突破数据库层面,不论怎么分区,这些分区都要在一个数据库下。而分表可以将子表分配在同一个库中,也可以分配在不同库中,突破数据库性能的限制。
  3. 分区只能替代水平分表的功能,无法取代垂直分表的功能。

四、分库

  1. 分区和分表可以把单表分到不同的硬盘上,但不能分配到不同服务器上。一台机器的性能是有限制的,用分库可以解决单台服务器性能不够,或者成本过高问题。
  2. 分库同样是为了应对超大数据带来的巨大的IO需求,如果不拆库,那么单库所能支持的吞吐能力和磁盘空间,就会成为制衡业务发展的瓶颈。分库的主要目的是为突破单节点数据库服务器的I/O能力限制,解决数据库水平扩展性问题。
  3. 分库类型
    • 水平分库和水平分表相似,并且关系紧密,水平分库就是将单个库中的表作水平分表,然后将子表分别置于不同的子库当中,独立部署。
    • 垂直分库
      将一个库下的表作不同维度的分类,然后将其分配给不同子库的策略。例如,我们可以将用户相关的表都放置在 usrdata 这个库中,将订单相关的表都放置在 odrdata 中,以此类推。
相关推荐
for_ever_love__5 小时前
MySQL ORDER BY 排序优化:从 Using filesort 到索引有序扫描(含双路 / 单路排序原理)
java·mysql·优化·存储·by·order·filesort
Sayai8 小时前
DataX 离线数据同步实战:Elasticsearch 数据批量导出 MySQL(作业配置、并发调优与定时同步平台化设计)
大数据·mysql·elasticsearch·datax·数据同步
颜酱9 小时前
一栋商业大厦,讲清 InnoDB 的表空间、段、区和页
后端·mysql
PC2005-cloud11 小时前
Mysql学习笔记:InnoDB Cluster 集群从零搭建实战,基于 Docker 实现高可用读写分离架构
笔记·学习·mysql
这个DBA有点耶12 小时前
分布式事务深度:TCC空回滚、悬挂与Saga补偿风暴的根因与解法
数据库·mysql·代码规范
QEasycloud12 小时前
BOM接口抛转失败钉钉通知策略实战教程:MySQL异常日志到钉钉消息的端到端配置
android·mysql·钉钉
又尔D.12 小时前
MySQL下载安装
数据库·mysql
夜雪一千12 小时前
MySQL 删除 JSON 类型的数据实战
mysql·adb·json
iCxhust13 小时前
51单片机电力载波应用开发(九)51产品化
c语言·数据库·嵌入式硬件·mysql·51单片机·软件工程·c51
tryxr14 小时前
如何分析一个慢sql
数据库·sql·mysql·慢sql