MySQL分区

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL分区相关的知识,希望对你有一定的参考价值。

分表是将一个大表按照一定的规则分解成多张具有独立存储空间的实体表,app读写的时候根据事先定义好的规则得到对应的子表名,然后去操作它。而分区是将数据分段划分在多个位置存放,分区后,表面上还是一张表,但数据散列到多个位置了。app读写的时候操作的还是大表名字,db自动去组织分区的数据。

分区类型主要有range、list、hash、key

以常规hash举例说明分区是如何创建的

常规hash是取模运算

创建一个雇员表,根据id分成4个区,根据取模结果分别分成0,1,2,3四个区

CREATE TABLE `partitions` (
  `id` int(10) NOT NULL,
  `ename` varchar(100) NOT NULL,
  `hired` date NOT NULL DEFAULT ‘1992-03-03‘,
  `separated` date NOT NULL DEFAULT ‘1992-03-03‘,
  `job` varchar(100) NOT NULL,
  `store_id` int(10) NOT NULL
)
partition by hash (id) partitions 4;

创建成功之后查看数据文件,数据文件和索引文件单独存放

技术分享

然后插入数据测试数据是否已经分区存在

技术分享

按照预定的结果,id为1应该放在分区1,2放在分区2,3放在分区3,4放在分区0

查看分区的分布情况

SELECT PARTITION_NAME,PARTITION_METHOD,PARTITION_EXPRESSION,PARTITION_DESCRIPTION,TABLE_ROWS,SUBPARTITION_NAME,SUBPARTITION_METHOD,SUBPARTITION_EXPRESSION 
FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA=SCHEMA() AND TABLE_NAME=‘partitions‘;

技术分享

可以看到情况如预期一样


hash分区由原来的四个合并成两个,然后查看数据如何存储

ALTER TABLE `partitions` COALESCE PARTITION 2

然后查看分布情况

技术分享

发现数据重新取模存储到新的分区

以上是关于MySQL分区的主要内容,如果未能解决你的问题,请参考以下文章

从mysql的片段中加载ListView

MySQL表分区

连接MySQL出现错误:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)(代码片段

mysql分区表

使用 json rereiver php mysql 在片段中填充列表视图

MySQL 表数据分区,每10000条数据自动分区