使用show variables like '%partition%';如果不支持分区,那么value字段值为No。
3.重要概念描述
3.1 分区字段
1)当仅存在单一主键时,不存在唯一键,那么分区字段必须是主键字段;
2)当存在复合主键时,不存在唯一键,那么分区字段必须是主键组合的一部分字段,一个或多个。
3)当主键和唯一键都存在时,那么分区字段必须同时包括主键字段和唯一键字段。
4.分区表类型
4.1 range分区
1)语法展示:
# 语法
# 在创建表单的最后,添加partitions by range(分区字段)(
# partition 分区名 values less than(阀值1),
# partition 分区名 values less than(阀值2),
# ...
# partition 分区名 values less than(阀值n),
# )
示例展示:
create table test_range(
id int auto_increment,
description varchar(50),
primary key(id)
) ENGINE=InnoDB auto_increment=1 default charset=utf8
partition by range(id)(
partition p1 values less than(6), #id<6的存放在p1分区
partition p2 values less than(11) #6 <= id < 11 存放在p2分区
);
查看分区情况:
show create table test_range;
注意到,在显示的表结构添加了分区表的信息。
数据测试:
insert into test_range values(null, "test1");
insert into test_range values(null, "test2");
insert into test_range values(null, "test3");
insert into test_range values(null, "test4");
insert into test_range values(null, "test5");
insert into test_range values(null, "test6");
insert into test_range values(null, "test7");
insert into test_range values(null, "test8");
insert into test_range values(null, "test9");
insert into test_range values(null, "test10");
插入10条数据,此时我们来查看其查询执行过程:
从结果可以发现,其只是在p1分区执行的查询,那么此时就减少了查询扫描的数据量,从而提高了查询效率。
如果此时,我们插入第11条数据会发生什么情况呢?
insert into test_range values(null, "test11");
会发错:insert into test_range values(null, "test11")Error Code: 1526. Table has no partition for value 110.015 sec