【分库分表篇】分区和分表的区别

在这里插入图片描述

分区和分表的区别

  • ✔️ 解析
  • ✔️拓展知识仓
    • ✔️分区的方式
    • ✔️MySQL 数据库支持的分区类型为水平分区


✔️ 解析


数据库中数据量过多,表太大的时候,不仅可以做分库分表,还可以做表分区,分区和分表类似,都是按照一定的规则将一张大表进行分解。


听上去好像也差不多,不就是将表拆分吗? 那具体有什么差别呢?


主要是分区和分表后数据的数据存储方式有变化。


在Innodb中 (8.0之前),表存储主要依赖两个文件,分别是.frm文件和ibd文件。.frm文件用于存储表结构定义信息,而.ibd文件则用于存储表数据。


假如我们有一张users表,想要对他进行分区和分表,区别如下:


MySQL InnoDB存储引擎在分区表时,会将每一个分区分别存放在一个单独的 .ibd 文件中,所有的 .ibd 文件组合构成表的物理结构,即 Table Space。


对于上面分区的 users表,存储时会在 MySQL的 data 目录下创建一个用户名+表名+分区名.ibd 的文件(如: users_p1.ibd) ,用来存储 users 表中第一个分区的数据,同样会有 users_p2.ibd 和users_p3.ibd 来存储第二和第二个分区的数据:


users_p1.ibd
users_p2.ibd
users_p3.ibd
users p4.ibd
users .frm

MySQL InnoDB存储引擎在分表时,会将每一个分表分别存放在一个单独的 .frm 文件中,所有的 .frm 文件组合构成表的逻辑结构,即 Table Definition。


对于上面分表的users表,存储时会在 MySQL的data目录下创建后缀名为“users_1.frm”的表格文件,存储users 表中第一个分表的数据,同样会有 users_2.frm 和 users_3.frm 来存储第二和第=分表的数据:


users_1.ibd
users_1.frm
users_2.ibd
users_2.frm
users_3.ibd
users_3.frm
users_4.ibd
users_4.frm

在做了分区后,表面是还是只有一张表,只不过数据保存在不同的位置上了 (同一个.frm文件),在做数据读取的时候操作的表名还是users表,数据库会自己去组织各个分区的数据。


而在做了分表之后,不管是表面上,还是实际上,都已经是不同的表了 (多个.frm文件),数据库操作的时候,需要去指定具体的表名。


一般来说,数据量变大时,我们应该先考虑分区,分区搞不定再考虑分表。


因为分表可以在分区的基础上,进一步减少查询时的系统开销。因为分表后,单表数据量小,页缓存率更高,I/O读写性能更优,另外分表也能降低了锁带来的阻塞,也可以提高事务处理效率。还有就是小的表可以提升备份和恢复的速度,并且是有更好的横向扩展件。


✔️拓展知识仓


✔️分区的方式


表分区的方式有水平分区、垂直分区:


1 . 水平分区 : 将表根据行进行划分,即把一个表的数据划分成多个表的数据,每个表形成一个分区,这些细分出来的部分存放在多个不同的分区表中(比如按年份等)。每块数据都存放在不同的表中,可以显著提高操作的效率。


2 . 垂直分区 : 将表根据表字段进行划分,将表中的列(或字段)分割成多个数据表,用于存储不同的业务场景内的数据。使分区后的数据表垂直分离,可以有效减少数据库查询中非必要的访问。


✔️MySQL 数据库支持的分区类型为水平分区


常见的表分区实践中,可以按照以下一些原则进行分区:

1 . 按照系统负载,将数据分到不同的区域中
2 . 按照应用程序查询模式,将数据库分为不同的分区
3 . 按照月份或者年份分区
4 . 通过实践哈希法可以将记录放置到不同的分区中
5 . 基于范围查询,使用分段来将记录放置到不同的分区中,以便提高查询效率


MySQL水平分区的创建方法


CREATE TABLE orders (order_id INT PRIMARY KEY,order_date DATE,customer_id INT,total_amount DECIMAL(102)
) PARTITION BY RANGE (YEAR(order_date)) (PARTITION P0 VALUES LESS THAN (2020),PARTITION P1 VALUES LESS THAN (2021),PARTITION P2 VALUES LESS THAN (2022),PARTITION P3 VALUES LESS THAN MAXVALUE
);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/310666.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringIOC之ClassPathXmlApplicationContext

博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

C# WPF上位机开发(MVVM模式开发)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 学习过vue的同学都知道mvvm这个名词。从字面上理解,可能有点拗口,但是我们可以去理解一下它的优点是什么。mvc相信大家都明…

python期刊稿件在线投稿系统q2ud0

本系统的用户可分为管理员、投稿者、审稿人和编辑四个用户角色组成。管理员可以管理系统内所有功能,主要有个人中心、投稿者管理、审稿人管理、编辑管理、个人稿件管理、审核稿件管理、稿件信息管理、类型管理等功能;编辑登录系统主要有个人中心、审核稿…

C#进阶-IIS应用程序池崩溃的解决方案

IIS是微软开发的Web服务器软件,被广泛用于Windows平台上的网站托管。在使用IIS过程中,可能会遇到应用程序池崩溃的问题,原因可能有很多,包括代码错误、资源不足、进程冲突等。本文将为大家介绍IIS应用程序池崩溃的问题分析和解决方…

lv13 内核与用户空间

一、内核空间和用户空间 为了彻底解决一个应用程序出错不影响系统和其它app的运行,操作系统给每个app一个独立的假想的地址空间,这个假想的地址空间被称为虚拟地址空间(也叫逻辑地址),操作系统也占用其中固定的一部分…

如何修改Anaconda的Jupyter notebook的默认启动路径

1.打开Anaconda控制台 2.输入下面的命令 jupyter notebook --generate-config 这个命令的作用是生成 Jupyter notebook 的配置文件。如果你是第一次运行,会直接生成这个文件。如果曾经运行过这个命令,就会像下图一样问你时候要覆盖原来的文件。这个时候…

Python集成开发工具

第二章、IDE(PyCharm) 一、设置py文件模板 设置模版 二、格式化代码设置 三、PyCharm运行python源文件的模式 第一次按照何种模式执行测试用例,后续都会按照这种方式去执行 普通模式,unittest模式,pytest模式介绍 四…

4.31 构建onnx结构模型-Tile

前言 构建onnx方式通常有两种: 1、通过代码转换成onnx结构,比如pytorch —> onnx 2、通过onnx 自定义结点,图,生成onnx结构 本文主要是简单学习和使用两种不同onnx结构, 下面以 Tile 结点进行分析 方式 方法一…

可运营的虚拟物品发卡服务的平台,卡密寄售系统,支持自营和商家入驻模式

源码介绍 发卡宝是一个专门为数码卡和虚拟物品发卡服务的平台。我们整合了各种虚拟商品,为卖家提供快捷便利的销售工具,为买家提供可靠安全的购买渠道。卖家可以轻松管理库存、自定义价格和折扣、快速发货,并实时获得销售记录和分析。买家可…

2024主流的免费电脑数据恢复软件EasyRecovery

EasyRecovery绿色版是一款非常专业的电脑数据恢复工具。它可以全面恢复删除丢失数据,能对电脑误删文件恢复、格式化硬盘数据恢复、手机U盘数据恢复等,能恢复包括文档、表格、图片、音视频等各种文件,此版本经过处理,可永久免费使用…

【文生图系列】 Stable Diffusion v1复现教程

文章目录 Stable Diffusion v1环境配置权重下载txt2imgbug超参数 Diffusers 参考 Stable Diffusion v1 stable diffusion是一个潜在的文本到图像的扩散模型,能够在给定任何文本输入的情况下生成照片逼真的图像。 环境配置 https://github.com/CompVis/stable-diff…

阿里云 ACK 云上大规模 Kubernetes 集群高可靠性保障实战

作者:贤维 马建波 古九 五花 刘佳旭 引言 2023 年 7 月,阿里云容器服务 ACK 成为首批通过中国信通院“云服务稳定运行能力-容器集群稳定性”评估的产品, 并荣获“先进级”认证。随着 ACK 在生产环境中的采用率越来越高,稳定性保…