表分区
随着我们项目的发展,数据量越来越大,查询和持久化效率随之降低,所以在我们给相应的表 改成 分区表
分区优点:
1、对于那些已经失去保存意义的数据,通常可以通过删除与那些数据有关的分区,很容易地删除那些数据。
2、一些查询可以得到极大的优化,这主要是借助于满足一个给定WHERE语句的数据可以只查询一个或多个分区内,
2、一些查询可以得到极大的优化,这主要是借助于满足一个给定WHERE语句的数据可以只查询一个或多个分区内,
这样在查找时就不用查找其他剩余的分区。
3、涉及到例如SUM()和COUNT()这样聚合函数的查询,可以很容易地进行并行处理。
3、涉及到例如SUM()和COUNT()这样聚合函数的查询,可以很容易地进行并行处理。
这种查询的一个简单例子如 “SELECT user_id, COUNT (hobbys) as hobbys_total FROM userInfo GROUP BY user_id;”。
通过“并行”,这意味着该查询可以在每个分区上同时进行,最终结果只需通过总计所有分区得到的结果。
其中分区有四种:
RANGE分区:基于属于一个给定连续区间的列值,把多行分配给分区。
LIST分区:类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择。
HASH分区 与 KEY分区 类似,是按照某种算法对字段进行分区。
我们选用的是RANGE分区 和 LIST分区
创建分区表 create table goods(
id int ......
gt_id....
*
PRIMARY KEY (`id`,`gt_id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8
PARTITION BY LIST (gt_id)
PRIMARY KEY (`id`,`gt_id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8
PARTITION BY LIST (gt_id)
(
PARTITION pA VALUES IN (1),
PARTITION pA VALUES IN (1),
PARTITION pA VALUES IN (1),
)
增加删除分区语句:
alter table T_part add partition(partition p2 values less than (MAXVALUE)); ---新增分区
alter table T_part DROP partition p2; ----删除分区
欢迎各位大牛一起交流QQ:898190483,新人一个继续努力