概述

分区表就是把大表按条件单独存储到不同的”物理小表”中,再构建出的完整”逻辑表”。
下例中,把t_xxx表物理上分为3个表
l6magbjq.png

l6magbjq.png

优点

  1. 更少的数据检索范围
  2. 拆分超级大的表,将部分热数据加载至内存
  3. 分区表的数据更容易维护
  4. 分区表数据文件可以分布在不同的硬盘上,并发IO
  5. 减少锁的范围,避免大表锁表
  6. 可独立备份,恢复分区数据

建立语句

CREATE TABLE test partitionid (
 int(11)NOT NULL,
    create_time datetime NOT NULL,
  cyear int, -- 年份列
   PRIMARY KEY (id,create_time,cyear)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
PARTITION BY RANGE (cyear) -- 指向cyear这一列,表示用这一列进行分区
(
PARTITION y14before VALUES LESSTHAN1(2014),-- 小于2014年的放在分区名称为y14before的表中
PARTITION y14_15 VALUES LESS THAN(2015),-- 2014-2015年之间
PARTITION y15_16 VALUESLESSTHAN(2016),
PARTITION y16_17 VALES LESSTHAN(2017),
PARTITION y17_18 VALUESLESSTHAN(2018),
PARTITION y18_19 VALUESLESSTHAN(2019),
PARTITION y19_20 VALUESLESS THAN(2020)
PARTITION y20after VALUES LESS THAN maxvalue -- 2020年以后的
ENGINE = InnoDB -- 这个不写也可以,因为默认就是这个
);

建立完成之后,在数据目录,会拆分成一个个的分区表文件。
我们可以使用以下sql语句,查看每个分区表的数据量:

select PARTITION_NAME as"分区",TABLE_ROWS as "行数" from
information_schema.partitions where table_schema="testdb"and table_name="test_partition";

使用的限制

  1. 查询必须包含分区列,不允许对分区列进行计算,否则会对所有的分区文件进行全部的扫描
  2. 分区列必须是数字类型
  3. 分区表不支持建立外键索引
  4. 建表时主键必须包含所有的列,这个就是很多人不愿意使用分区表的原因,这个要求有点过分,会让我们的主键索引变得庞大无比
  5. 最多1024个分☒
最后修改:2023 年 12 月 30 日
如果觉得我的文章对你有用,请随意赞赏