首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >mysql-innodb之分区表

mysql-innodb之分区表

作者头像
一只羊羊
修改2025-04-07 15:19:04
修改2025-04-07 15:19:04
2850
举报
  • 定义: 分区表从逻辑上来说只有一个表或者分区,从物理上表或者索引可能由数十个物理分区组成。mysql数据库支持水平分区,且为局部分区,单个分区同时存储数据+索引。
  • 优势:分区表将数据划分成多个大小不一的区,单个区内查找速度会快于单表
  • 分区类型:
  • RANGE分区:行数据基于一个给定连续区间的列值被放入分区,也称作区间分区。可用于日期分区等
  • LIST分区:面向离散的数据分区,而非连续, 可用于数据相对确定的
  • HASH分区:根据用户自定义的表达式的返回值来进行分区, 可以将数据相对均匀的分布到各个分区。
  • KEY分区:根据mysql数据库提高的哈希函数来进行分区
  • RANGE分区: 创建表t 带1个分区 create table t ( id int PRIMARY KEY ) engine=innodb PARTITION BY RANGE(id)( PARTITION p0 VALUES less THAN(100) ) 插入数据

insert into t (id) values (90),(99)

查看分区信息

select * from infomation_schema.patitions

查询120,220会报错,不存在如下分区,故新增分区

alter table t add partition (

partition p1 values less than(200),

partition p1 values less than(300))

插入数据

insert into t (id) values (120),(220)

  • LIST分区: 创建分区 create table t ( id int primary key ) engine=innodb partition by list(id)( partition p0 values in (1,2,3,4,5) partition p1 values in (6,7,8,9,10) ) 插入数据

insert into t (id) values (1),(3),(6) 插入成功

insert into t (id) values (11),(13) 插入失败

  • HASH分区 创建4个分区 需要提前确定分区数量,非自增主键由于数据本身的离散性,数据相对均匀程度会低一些,若使用自增主键分区,数据会更均匀 create table t ( id int primary key )engine=innodb partition by hash (id) partitions 4
  • 子分区 在主分区的基础上还可以再进行分区,称为子分区(主分区),子分区的数量可以不一致,也可以不和主分区类型一致,但是建议子分区数量保持一致,且不同分区的数据量级差距不大 1. 子分区的数据和索引都是单独存储的,映射为物理分区 2. 物理分区是指单独的数据文件、索引文件、表结构等 3. 表分区是逻辑维度,而区是存储维度。表分区是为了解决查询效率,快速影响用户查询,且每个分区都有自己单独的.idb文件,而idb文件一般由多个区构成,一个区包含连续的64个页 *疑问: 表分区更适合OLAP, 对于OLTP不是很适用?

参考文献:mysql技术内幕(innodb存储引擎)第2版

原创声明:转载自己其他账号

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档