mysql 8.0.17 分区特性测试


Server version: 8.0.17 Source distribution

编译安装脚本使用了mysql的分区,觉得最不爽的是mysql partition 限制:A UNIQUE INDEX must include all columns in the table’s partitioning functionA PRIMARY KEY must include all columns in the table’s partitioning function意思就是:用于分区的column 必须是主键列,或者主键的其中几个列,或者是唯一键列。无论创建何种类型的分区,如果表中存在主键或唯一索引时,分区列必须是唯一索引的一个组成部分。也不清楚作者这样设计的初衷是什么。比如以下的写法就是有语法错误:这样会大大限制mysql分区使用范围。

1.range 分区,频繁使用。
基于属于一个给定连续区间的列值,把多行分配给分区。 2. list 分区,比较少使用。类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择。注意看上面,都是没有主键,没有唯一键的。3.HASH分区,频繁使用:基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。这个函数可以包含MySQL 中有效的、产生非负整数值的任何表达式。4.KEY分区:类似于按HASH分区,区别在于KEY分区只支持计算一列或多列,且MySQL服务器提供其自身的哈希函数。必须有一列或多列包含整数值。上面两个例子你会觉得很奇怪,都没有指定分区列。mysql默认就使用了唯一键来做了分区。
1)当数据量很大(过T)时,肯定不能把数据再如到内存中,这样查询一个或一定范围的item是很耗时。另外一般这情况下,历史数据或不常访问的数据占很大部分,最新或热点数据占的比例不是很大。这时可以根据有些条件进行表分区。
2)分区表的更易管理,比如删除过去某一时间的历史数据,直接执行truncate,或者狠点drop整个分区,这比detele删除效率更高
3)当数据量很大,或者将来很大的,但单块磁盘的容量不够,或者想提升IO效率的时候,可以把没分区中的子分区挂载到不同的磁盘上。
4)使用分区表可避免某些特殊的瓶颈,例如Innodb的单个索引的互斥访问..
5)单个分区表的备份很恢复会更有效率,在某些场景下6)涉及到例如SUM()和COUNT()这样聚合函数的查询,可以很容易地进行并行处理。这种查询的一个简单例子如“SELECT salesperson_id, COUNT (orders) as order_total FROM sales GROUP BY salesperson_id;”。通过“并行”,这意味着该查询可以在每个分区上同时进行,最终结果只需通过总计所有分区得到的结果。表分区了,查询where必须带上分区键开发云主机域名,否则使用不到分区的好处了。我们来看下例子:创建了2个表,数据都是800万。

一个表no_part_tab的大小是428M。在这里另外查询时间和扫描的行数,高下可判。

相关推荐: MySQL几个容易混淆的概念

1、MySQL数据库服务:是MySQL软件、MySQL实例和MySQL数据库 这几个部分的总称,有时简称 MySQL服务2、MySQL实例:指mysqld进程3、MySQL数据库:是MySQL data目录下的一系列物理文件的集合,至少有4个(test、mys…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 06/05 09:39
下一篇 06/05 09:39

相关推荐