12.LIST分区

MySQL的LIST分区是将数据根据离散的值进行分区,与RANGE分区的区别在于值的连续性。文中通过创建和操作一个按奇偶性分区的表,展示了LIST分区的工作原理。当尝试插入不符合分区条件的数据时,InnoDB存储引擎会回滚整个插入过程。LIST分区适用于具有枚举值的列,如性别字段。示例中创建了一个按性别分区的表,并演示了查询特定性别的高效性。
摘要由CSDN通过智能技术生成

1.何为LIST分区?

LIST和RANGE分区唯一的区别就是,RANGE分区存储的值是连续的区间,而LIST分区存储的值是离散的。

2.例子学习

CREATE TABLE t(
    a int,
    b int    
)
partition by list(b)(
    partition p0 values in(1,3,5,7,9),
    partition p1 values in(0,2,4,6,8)
);

这表示p0分区只能存储b列为1,3,5,7,9的行数据。

注意,它的用法和range分区有所不同:

partition by list(b)(
    partition p0 values in(1,3,5,7,9),
    partition p1 values in(0,2,4,6,8)
)

现在,我们向这个分区表中插入数据:

INSERT INTO t(a,b)values(2,1);
INSERT INTO t(a,b)values(2,2);
INSERT INTO t(a,b)values(2,3);
INSERT INTO t(a,b)values(2,4);

下面插入一条不符合分区的数据:

INSERT INTO t(a,b)values(2,10);

在这里插入图片描述

很明显,插入失败。

这里我们要注意:在INNODB中,在执行多个insert的过程中,如果有一条失败,那么整个插入过程会回滚!!

3.LIST分区的应用场景

LIST分区特别适合枚举值列的分区,例如,将根据性别分区。

下面创建一张表:

CREATE TABLE class_people(
    id int auto_increment,
    name varchar(20),
    sex int ,
    primary key(id,sex)
)
partition by list(sex)(
    partition p0 values in(1),
    partition p1 values in(0)
);

其中1代表男生,0代表女生。

然后向表中插入数据:

INSERT INTO class_people(name,sex)values('tom',1);
INSERT INTO class_people(name,sex)values('tony',0);
INSERT INTO class_people(name,sex)values('baby',1);
INSERT INTO class_people(name,sex)values('jayme',0);

在这里插入图片描述

下面看下下面语句的执行计划:

SELECT * FROM class_people where sex=1;

查找性别为男的数据:
在这里插入图片描述

可以明显的看到只查询了p0分区。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序员小牧之

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

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

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

打赏作者

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

抵扣说明:

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

余额充值