分区和分表区别:每张数据表都包含三个文件,分别是.MYD数据文件、.MYI索引文件和.frm表结构文件;分表实际上是将表查分为几分每一份都会有自己独立的三个文件;表分区后仍然是一张表,只是增加了存放数据的区块;
- 并不是所有的存储引擎都支持分区,支持分区的有InnoDB、MyISAM、NDB等,不支持的有CSV、MERGE等;
分区类型
- 1、RANGE:某一列数据为连续的,将不同区间的列值分区,多用于日期列分区;
- 2、LIST:面向散列值分区;
- 3、HASH:根据用户自定义表达式的返回值进行分区,返回值不能为负,将数据均匀地分布到预先定义的分区中;
- 4、KEY:根据Mysql提供的哈希函数来进行分区;
注意:如果表中存在主键或者唯一索引,分区列必须是唯一索引的一个组成部分。
常用分区命令
// 查看是否启用分区
show variables like '%partition%';
show plugins;
/**
* RANGE分区
**/
create table t (
id int
)
partition by range(id)(
partition p0 values less than (10),
partition p1 values less than (10));
alert table t add partition(partition p2 values less than maxvalue);
// 查看每个分区具体信息
select * from information_schema.PARTITIONS where table_name='t';
// 利用分区查询,查询条件最好都在一个分区内
explain partitions select * from sales where date>='2018-01-01' and '2018-12-13';
/**
* LIST分区
**/
create table t (
id int
)
partition by list(id)(
partition p0 values in (1,3,5,7),
partition p1 values in (2,4,6));
/**
* HASH分区
**/
create table t (
id int
)
partition by hash(id)
partitions 4; // 4表示被分割成分区的数量
网友评论