windows下MySql 表分区 InnoDB 引擎,复合主键分区

1.表分区概念:分区就是把一个数据表的文件和索引分散存储在不同的物理文件中。

分区后,在表数据文件目录 C:\ProgramData\MySQL\MySQL Server 5.5\data 打开对应的数据库目录,

在此目录下回生成分区表,对应分区的.ibd 文件

linux下对应的分区文件


Myisam 存储引擎,它默认使用独立表空间,所以可以在上面的磁盘空间里看到不同的分区

InnoDB 引擎则默认使用共享表空间,所以 如果想要在上述磁盘空间看到相应的分区文件,还需要修改数据库的配置文件

windows 下是 my.ini ,一般保存在安装目录的根目录下 C:\Program Files\MySQL\MySQL Server 5.5

linux 下是 my.cnf ,一般保存在/etc/my.cnf

在对应的配置文件下,添加  innodb_file_per_table=1  

重启mysql服务,正常情况下,分区成功就可以看到对应的分区文件了

2.mysql支持的分区类型:Range、List、Hash、Key,其中Range比较常用

   RANGE分区:基于属于一个给定连续区间的列值,把多行分配给分区。

   LIST分区:类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择。

   HASH分区:基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。这个函数可以包含MySQL 中有效的、产生非负整数值的任何表达式。

   KEY分区:类似于按HASH分区,区别在于KEY分区只支持计算一列或多列,且MySQL服务器提供其自身的哈希函数。必须有一列或多列包含整数值。


3.分区的限制

1.主键或者唯一索引必须包含分区字段,如primary key (id,username),不过innoDB的大组建性能不好。

2.很多时候,使用分区就不要在使用主键了,否则可能影响性能。

3.只能通过int类型的字段或者返回int类型的表达式来分区,通常使用year或者to_days等函数(mysql 5.6 对限制开始放开了)。

4.每个表最多1024个分区,而且多分区会大量消耗内存。

5.分区的表不支持外键,相关的逻辑约束需要使用程序来实现。

6.分区后,可能会造成索引失效,需要验证分区可行性。

4.案例

//创建表分区
DROP TABLE IF EXISTS `ms_day_summary_branch`;
CREATE TABLE `ms_day_summary_branch` (
  `id` bigint(20) NOT NULL COMMENT 'id',
  `user_id` bigint(20) NOT NULL,
  `type` int(11) NOT NULL
  PRIMARY KEY (id,user_id),
  KEY `index_select` (`user_id`,`type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPRESSED
partition by range (user_id % 3)(
        partition ms_day_summary_0 values less than (0),
        partition ms_day_summary_1 values less than (1),
        partition ms_day_summary_2 values less than (2)
);
//创建后添加分区
alter table ms_day_summary_branch add partition(
    partition ms_day_summary_4 values less than maxvalue
);
//创建后删除分区
alter table ms_day_summary_branch drop partition ms_day_summary_0;





  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值