「这是我参与2022首次更文挑战的第28天,活动详情查看:2022首次更文挑战」
MySQL中的分区
说完了数据备份,我们来说说MySQL的分区。在如今大数据量下的时代,关系型数据库单表可能存了上亿的数据,对MySQL来说,单表上亿的数据量处理起来已经相当吃力了。我们可能听说过分库分表的技术,在数据量大的情况下分库分表,将数据查询的压力分散,是个不错的选择,但是在一个老系统里边,引入新的技术可能导致一些意想不到的问题。这时,考虑MySQL本身的分区也是一种选择。
分区表的使用
要创建分区表,首先要看MySQL是否支持分区表的创建,我们可以用如下的语句查询:
show plugins
查看
partition这一行,如果是激活状态就可以创建分区表。分区表的创建语句如下:
CREATE TABLE tu (c1 BIGINT UNSIGNED)
PARTITION BY RANGE(c1 - 10) (
PARTITION p0 VALUES LESS THAN (-5),
PARTITION p1 VALUES LESS THAN (0),
PARTITION p2 VALUES LESS THAN (5),
PARTITION p3 VALUES LESS THAN (10),
PARTITION p4 VALUES LESS THAN (MAXVALUE)
);
执行之后我们的分区表就创建完成了,如果有报错的话,可能要设置下sql_mode。sql_mode可以配置MySQL的一些计算行为,如果sql模式被改变了,那么分区表可能不能正常运作,因此,在分区表创建之后,不要修改sql模式,否则会导致数据丢失问题。在上面的语句中,我们用c1字段的值对数据进行了分区,总共分为了5个区,小于-5的,小于0的,小于5的和小于10的,最后是默认分区。在默认情况下,上面的语句无法正常运行,我们需要修改下sql_mode,如下:
SET sql_mode='NO_UNSIGNED_SUBTRACTION';
之后再次执行就没有问题了。我们在使用分区表的过程中,要保持所有有数据地方sql_mode都是一致的,避免出现奇奇怪怪的问题。