你了解MySQL分区表吗?知道哪些情况不适用分区表吗?

本文详细介绍了MySQL分区表的使用、注意事项、误区和业务实战。分区表是将大表逻辑上分为多个部分,但物理上存储在不同文件中。虽然分区有助于数据管理,但并非用于性能提升,反而可能引入非分区列查询的性能问题。在设计时,查询条件应包含分区字段以避免全表扫描。以电商订单表为例,分区表能便捷地管理大量历史数据。
摘要由CSDN通过智能技术生成

一、分区表的使用

简单来说,分区表就是把物理表结构相同的几张表,通过一定算法,组成一张逻辑大表。这种算法叫“分区函数”,当前 MySQL 数据库支持的分区函数类型有 RANGE、LIST、HASH、KEY、COLUMNS。

无论选择哪种分区函数,都要指定相关列成为分区算法的输入条件,这些列就叫“分区列”。另外,在 MySQL 分区表中,主键也必须是分区列的一部分,不然创建分区表时会失败,比如:

CREATE TABLE t (

    a INT,

    b INT,

    c DATETIME(6),

    d VARCHAR(32),

    e INT,

    PRIMARY KEY (a,b)

)

partition by range columns(c) (

    PARTITION p0000 VALUES LESS THAN ('2019-01-01'),

    PARTITION p2019 VALUES LESS THAN ('2020-01-01'),

    PARTITION p2020 VALUES LESS THAN ('2021-01-01'),

    PARTITION p9999 VALUES LESS THAN (MAXVALUE)

);

ERROR 1503 (HY000): A PRIMARY KEY must include all columns in the table's partitioning function (prefixed columns are not considered).

上面创建了表 t,主键是复合索引,由列 a、b 组成。表 t 创建分区表的意图是根据列 c(时间列)拆分数据,把不同时间数据存放到不同分区中。

从错误的提示中看到:分区表的主键一定要包含分区函数的列。所以,要创建基于列c 的数据分片的分区表,主键必须包含列 c,比如下面的建表语句:

CREATE TABLE t (

    a INT,

    b INT,

    c DATETIME,

    d VARCHAR(32),

    e INT,

    PRIMARY KEY (a,b,c),

    KEY idx_e (e)

)

partition by range columns(c) (

    PARTITION p0000 VALUES LESS 
  • 18
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我爱娃哈哈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值