关于mysql分区与未分区速度和带有主键表分区的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于mysql分区与未分区速度和带有主键表分区的问题相关的知识,希望对你有一定的参考价值。

如果一张带有主键的表分区的话,分区字段必须是主键,我试了试网上的方法不行,并且我也不知道这个方法的原理是什么。。。不知道这个该怎么解决,这个是mysql的规定,那么像下面截图的这种情况该怎么分区?

截图:

2.分过区的表:只有一个date字段类型的字段,我现在插入了1000万的数据,分了4个分区,平均下来每个250万,然后再建立一张相同的表,数据也一模一样,但是没有分区。

我测试的意图是想看看查询的速度差距多大,刚测试的时候差距挺大的,但是当我给date字段加上一般索引搜索速度反而慢了一倍。两个表都加了索引,现在速度差不多了。。。为什么分区表加上索引反而慢了???请知道的大神帮小弟解惑解惑。。。

分区的一些优点包括:
1)、与单个磁盘或文件系统分区相比,可以存储更多的数据。
2)、对于那些已经失去保存意义的数据,通常可以通过删除与那些数据有关的分区,很容易地删除那些数据。
3)、一些查询可以得到极大的优化,这主要是借助于满足一个给定WHERE语句的数据可以只保存在一个或多个分区内,这样在查找时就不用查找其他剩余的分区。因为分区可以在创建了分区表后进行修改,所以在第一次配置分区方案时还不曾这么做时,可以重新组织数据,来提高那些常用查询的效率。
4)、涉及到例如SUM()和COUNT()这样聚合函数的查询,可以很容易地进行并行处理。这种查询的一个简单例子如 “SELECT salesperson_id, COUNT (orders) as order_total FROM sales GROUP BY salesperson_id;”。通过“并行”,这意味着该查询可以在每个分区上同时进行,最终结果只需通过总计所有分区得到的结果。
5)、通过跨多个磁盘来分散数据查询,来获得更大的查询吞吐量。

这里有一篇文章分析的非常好,请参考:
http://www.cnblogs.com/acpp/archive/2010/08/09/1795464.html
参考技术A 分区查询速度较快

Mysql 8.0版本开始,不允许创建 MyISAM 分区表

从MySQL 8.0版本开始,就不允许创建 MyISAM 分区表了,只允许创建已经实现了本地分区策略的引擎。

到目前为止,只有InnoDB和NDB这两个引擎支持本地分区策略。

【1】实际测试

(1)数据库版本号

# 获取版本号
SELECT VERSION(); # 8.0.12

(2)键表InnoDB引擎

CREATE TABLE `t_innodb` (
  `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);

创建成功。

(3)MyiSAM引擎

CREATE TABLE `t_myisam` (
  `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 = MYISAM,
 PARTITION p_2018 VALUES LESS THAN (2018) ENGINE = MYISAM,
 PARTITION p_2019 VALUES LESS THAN (2019) ENGINE = MYISAM,
 PARTITION p_others VALUES LESS THAN MAXVALUE ENGINE = MYISAM);

创建失败:

技术图片

Good Good Study, Day Day Up.

顺序 选择 循环 总结

以上是关于关于mysql分区与未分区速度和带有主键表分区的问题的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 分区表,为啥分区键必须是主键的一部分?

十、MySQL表分区

MySQL KEY分区

记录一下MySQL的表分区常用操作

mysql5.7子分区可以是list的吗

Mysql分区表及自动创建分区Partition