当前位置:   article > 正文

mysql分区表_mysql8 myisam分区表引擎

mysql8 myisam分区表引擎

1.分区表是什么?如何使用分区表?
创建一个分区表

  1. CREATE TABLE `t` (
  2.   `ftime` datetime NOT NULL,
  3.   `c` int(11) DEFAULT NULL,
  4.   KEY (`ftime`)
  5. ) ENGINE=InnoDB DEFAULT CHARSET=latin1
  6. PARTITION BY RANGE (YEAR(ftime))
  7. (PARTITION p_2017 VALUES LESS THAN (2017) ENGINE = InnoDB,
  8.  PARTITION p_2018 VALUES LESS THAN (2018) ENGINE = InnoDB,
  9.  PARTITION p_2019 VALUES LESS THAN (2019) ENGINE = InnoDB,
  10. PARTITION p_others VALUES LESS THAN MAXVALUE ENGINE = InnoDB);

如果用这个sql创建分区表,可以看到有一个.frm文件和4个.ibd文件,对于引擎来说是4个表,对于server来说的是1个表;
这里是范围分区,mysql还支持hash分区,list分区等,其他分区可参考mysql手册:https://dev.mysql.com/doc/refman/8.0/en/partitioning-types.html

2.分区表的特点:

  • MySQL 在第一次打开分区表的时候,需要访问所有的分区;
  • 在 server 层,认为这是同一张表,因此所有分区共用同一个 MDL 锁;
  • 在引擎层,认为这是不同的表,因此 MDL 锁之后的执行过程,会根据分区表规则,只访问必要的分区。

3.分区策略:通用分区策略;本地分区策略;
        MyISAM分区表使用通用分区策略,每次访问都有server层控制,通用分区策略,是 MySQL 一开始支持分区表的时候就存在的代码,在文件管理、表管理的实现上很粗糙,因此有比较严重的性能问题。

        MySQL 从 5.7.17 开始,将 MyISAM 分区表标记为即将弃用,从 MySQL 8.0 版本开始,就不允许创建 MyISAM 分区表了,只允许创建已经实现了本地分区策略的引擎。目前来看,只有 InnoDB 和 NDB 这两个引擎支持了本地分区策略。
        从 MySQL 5.7.9 开始,InnoDB 引擎引入了本地分区策略(native partitioning)。这个策略是在 InnoDB 内部自己管理打开分区的行为。

4.什么时候应该用?什么时候应该不用?

  • 对业务透明,业务代码更简洁;
  • 删除历史数据更方便;alter table t drop partition ... 操作是直接删除分区文件,效果跟 drop 普通表类似。与使用 delete 语句删除数据相比,优势是速度快、对系统影响小。

5.MDL锁是什么锁?
        MDL全称为metadata lock,即元数据锁。 MDL锁主要作用是维护表元数据的数据一致性,在表上有活动事务(显式或隐式)的时候,不可以对元数据进行写入操作。 因此从MySQL5.5版本开始引入了MDL锁,来保护表的元数据信息,用于解决或者保证DDL操作与DML操作之间的一致性。


        DDL:对数据库中的某些对象 (例如,database,table)进行管理,如Create,Alter和Drop。
        DML:DML操作 对数据库中的数据进行一些简单操作,如insert,delete,update,select等。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号