mysql创建用region分区_MySQL分区

本文详细介绍了MySQL数据库的分区功能,包括RANGE、LIST、HASH、KEY等分区类型,以及如何创建、删除和重新组织分区。通过示例展示了如何根据特定列(如id)进行分区,以提高查询效率,并探讨了分区对数据透明性和性能优化的影响。
摘要由CSDN通过智能技术生成

什么是数据库分区:

以mysql为例,mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面(可以通过my.cnf中的datadir来查看),一张表主要对应着三个文件:

frm存放表结构

myd存放表数据

myi存表索引

如果一张表的数据量太大的话,那么myd,myi就会变的很大,查找数据就会变的很慢,这个时候我们可以利用mysql的分区功能。在执行查询的时候,优化器会根据分区定义过滤哪些没有我们需要数据的分区,这样查询就无须全表扫描所有分区,只查找包含需要数据的分区即可。(查询条件包含了可以过滤分区的条件)

fbfae1295df4

分割后的文件

分区和分表的区别:

一张大表进行分区后,他还是一张表,不会变成二张表,对开代码端来说是透明的,但是他存放数据的区块变多了。分区是根据一定的规则把数据文件和索引文件进行了分割,还多出了一个.par文件,打开.par文件后你可以看出他记录了这张表的分区信息。

分区对于程序来说是透明的。

分区一般只能起到水平切分的作用。

创建分区:

1)分区列必须属于此表所有主键(组合)或唯一键(组合)的交集。关于分区列与主键的具体解释。如果没有主键和唯一键则没有此限制。

2)对于原生的RANGE分区,LIST分区,HASH分区,分区字段必须为整数字段名或返回确定整数的函数。

3)添加COLUMNS(支持RANGE分区,LIST分区),关键字可定义非integer范围及多列范围,不过需要注意COLUMNS括号内只能是列名,不支持函数。

4)在RANGE 分区中如果往分区列中插入NULL值会被当作最小的值来处理,在LIST分区中NULL值必须在枚举列表中否则插入失败,在HASH,KEY分区中NULL值会被当作0来处理。

RANGE分区:

根据范围分区,范围应该连续但是不重叠,不使用COLUMNS关键字时RANGE括号内必须为整数字段名或返回确定整数的函数。

//创建range分区表

mysql> CREATE TABLE IF NOT EXISTS `user` (

-> `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID',

-> `name` varchar(50) NOT NULL DEFAULT '' COMMENT '名称',

-> `sex` int(1) NOT NULL DEFAULT '0' COMMENT '0为男,1为女',

-> PRIMARY KEY (`id`)

-> ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1

-> PARTITION BY RANGE (id) (

-> PARTITION p0 VALUES LESS THAN (3),

-> PARTITION p1 VALUES LESS THAN (6),

-> PARTITION p2 VALUES LESS THAN (9),

-> PARTITION p3 VALUES LESS THAN (12),

-> PARTITION p4 VALUES LESS THAN MAXVALUE

-> );

Query OK, 0 rows affected (0.13 sec)

//插入一些数据

mysql> INSERT INTO `test`.`user` (`name` ,`sex`)VALUES ('tank', '0')

-> ,('zhang',1),('ying',1),('张',1),('映',0),('test1',1),('tank2',1)

->

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值