计算机软件网站建设,亚马逊购物网站,营业执照年检,丝绸之路网站建设分区和分表的区别 ✔️ 解析✔️拓展知识仓✔️分区的方式✔️MySQL 数据库支持的分区类型为水平分区 ✔️ 解析 数据库中数据量过多#xff0c;表太大的时候#xff0c;不仅可以做分库分表#xff0c;还可以做表分区#xff0c;分区和分表类似#xff0c;都是按照一定的规… 分区和分表的区别 ✔️ 解析✔️拓展知识仓✔️分区的方式✔️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 .frmMySQL 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
);