php分区表,【MYSQL】 分区表

对于MYSQL的态度一直都是会基本SQL和简单命令就行,最近处理一个数据量很大的项目,为了提高效率,在数据库方面的瓶颈上,选择了使用分区表来提高查询效率。至此

对于MYSQL的态度一直都是会基本SQL和简单命令就行,最近处理一个数据量很大的项目,为了提高效率,在数据库方面的瓶颈上,选择了使用分区表来提高查询效率。至此和大家一起分享一下。

1.引言

本文初略的讲述了mysql数据库如何分区表。

2.环境要求

在5.1版本中不是默认就安装了,而在之后版本中一般默认选择了安装分区表支持。可以通过如下方式查看当前数据库是否支持分区表操作:

00647fe62099a0d66681cb2b34732218.png

使用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;

15348dd7535e1e161e82f753292889e1.png

注意到,在显示的表结构添加了分区表的信息。

数据测试: 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条数据,此时我们来查看其查询执行过程:

39fb22df2a4906bf1a55626367f0cd24.png

从结果可以发现,其只是在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

原因很简单,因为在我们创建表单时,仅仅指定了1 - 10的id数值分区,当插入id=11时的分区时,此时没有分区提供,那么就引发错误,那么如果解决这样的问题呢,采取如下方式,修改表的分区方式:alter table test_range add partition(

partition p3 values less than(MAXVALUE)

);

# 添加一个分区,也就是p3是id从11到maxValue的存放区域

此时插入id=11的数据,并执行查询解析:

487f10b91d1543d6fc2b5baac9155470.png 发现,已经将其分配到p3分区中了。

还需要特别注意的时,使用partition by range(分区字段),其中的分区字段可以是分区字段的表单式,但是必须是返回的整数,在5.5版本中,可以使用partition by range column/columns语法,指定某个字段。这里不做介绍。大家可以自己尝试一下。

4.2 list分区

list分区可以理解为集合分区方式,意思就是指定某个集合来分区。

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值