美文网首页
mysql:分区表

mysql:分区表

作者: 阿猫阿狗Hakuna | 来源:发表于2019-08-07 17:30 被阅读0次

1.什么是分区表?

CREATE TABLE `t` (
  `ftime` datetime NOT NULL,
  `c` int(11) DEFAULT NULL,
  KEY (`ftime`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
PARTITION BY RANGE (YEAR(ftime))
(PARTITION p_2017 VALUES LESS THAN (2017) ENGINE = InnoDB,
 PARTITION p_2018 VALUES LESS THAN (2018) ENGINE = InnoDB,
 PARTITION p_2019 VALUES LESS THAN (2019) ENGINE = InnoDB,
PARTITION p_others VALUES LESS THAN MAXVALUE ENGINE = InnoDB);
insert into t values('2017-4-1',1),('2018-4-1',1);

这个表在系统的存储上包含1个.frm文件和4个.ibd文件,每个分区对应一个.ibd文件。也就是说:

  • 对于引擎层来说,这是4个表;
  • 对于Server层来说,这是1个表;

2.分区表对引擎层的处理有什么影响?

分区表可以把锁的粒度控制在分区中。
分区表和手工分表的区别在于一个是由server层来决定使用哪个分区,一个是由应用层代码来决定使用哪个分表。
从server层的角度看,分区表有一个广为诟病的问题:打开表的行为。

3.分区策略

每当第一次访问一个分区表的时候,mysql需要把所有分区都访问一遍。如果表的分区很多,会导致打开表文件的个数超过上限而报错。这个问题只会在MyISAM引擎上出现。
MyISAM引擎使用的分区策略是通用分区策略,比较粗糙,每次访问分区都由server层控制。
InnoDB引擎引入了本地分区策略,在InnoDB内部自己管理打开分区的行为。

4.分区表的server行为

从server层来看的话,一个分区表就只是一个表,所有分区共用同一个MDL锁。

相关文章

  • MySQL分区表

    确认mysql是否支持分区表 mysql分区表的特点 创建mysql数据表为hash表 常用mysql分区的类型 ...

  • MySQL-分区表

    MySQL-分区表 分区表(于MySQL 5.1引入,v 5.5后可以逐步考虑用于生产环境) 是一个独立的逻辑表,...

  • Mysql 分区表

    MySQL分区表支持RANGE,LIST,HASH,KEY,COLUMNS多种分区算法。 分区表的唯一索引和主键索...

  • MySQL版本

    MySQL版本对比 服务器性能 1.mysql,percona mysql,mariadb均开源,支持分区表,My...

  • pg inherit

    借助表的继承特性PostgreSQL实现了分区表功能,虽然相比Oracle、MySQL的分区表来说其实现过程比较麻...

  • mysql分区表

    首先检查Mysql服务器是否支持分区表: mysql>show plugins 如果显示有partition项,那...

  • hive的严格模式和分区

    相比mysql,hive有严格模式存在,为了不错误扫描整个数据,hive的分区表会将数据分成几个分区。查询分区表中...

  • Mysql 分区表删除

    分区表删除部分分区 使用场景:从 MySQL 5.1 开始,支持分区 创建日志表时建议使用分区方式 在上表的分区表...

  • mysql分区表测试

    mysql分区表测试 mysql部署情况 使用docker-compose在10.xx.xx.1机器进行部署, 端...

  • MySQL的分区、分表、集群、优化

    MySQL的分区 MySQL分区表是在数据库层面,MySQL自己实现的分表功能,在很大程度上简化了分表的难度。物理...

网友评论

      本文标题:mysql:分区表

      本文链接:https://www.haomeiwen.com/subject/mfdadctx.html