赞
踩
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);
如果用这个sql创建分区表,可以看到有一个.frm文件和4个.ibd文件,对于引擎来说是4个表,对于server来说的是1个表;
这里是范围分区,mysql还支持hash分区,list分区等,其他分区可参考mysql手册:https://dev.mysql.com/doc/refman/8.0/en/partitioning-types.html
2.分区表的特点:
3.分区策略:通用分区策略;本地分区策略;
MyISAM分区表使用通用分区策略,每次访问都有server层控制,通用分区策略,是 MySQL 一开始支持分区表的时候就存在的代码,在文件管理、表管理的实现上很粗糙,因此有比较严重的性能问题。
MySQL 从 5.7.17 开始,将 MyISAM 分区表标记为即将弃用,从 MySQL 8.0 版本开始,就不允许创建 MyISAM 分区表了,只允许创建已经实现了本地分区策略的引擎。目前来看,只有 InnoDB 和 NDB 这两个引擎支持了本地分区策略。
从 MySQL 5.7.9 开始,InnoDB 引擎引入了本地分区策略(native partitioning)。这个策略是在 InnoDB 内部自己管理打开分区的行为。
4.什么时候应该用?什么时候应该不用?
5.MDL锁是什么锁?
MDL全称为metadata lock,即元数据锁。 MDL锁主要作用是维护表元数据的数据一致性,在表上有活动事务(显式或隐式)的时候,不可以对元数据进行写入操作。 因此从MySQL5.5版本开始引入了MDL锁,来保护表的元数据信息,用于解决或者保证DDL操作与DML操作之间的一致性。
DDL:对数据库中的某些对象 (例如,database,table)进行管理,如Create,Alter和Drop。
DML:DML操作 对数据库中的数据进行一些简单操作,如insert,delete,update,select等。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。