本文主要给大家简单讲讲MySQL性能优化及分区、分表的详细步骤,相关专业术语大家可以上网查查或者找一些相关书籍补充一下,这里就不涉猎了,我们就直奔主题吧,希望MySQL性能优化及分区、分表的详细步骤这篇文章可以给大家带来一些实际帮助。
一、 分表
1. 分表简介
2. 分表类型
分为垂直切分和水平切分
3. 分表的方式
1) Mysql集群
2) 预先估计会出现大数据量并且访问频繁的表,将其分为若干个表
3) 利用merge存储引擎来实现分表
4. merge存储引擎分表


创建子表

创建主表

开始分表
通过ID取模的方式过滤出分别要插入到子表的数据

验证

子表2只有奇数数据,而主表都会有
每个子表都会有自己独立的表文件

二、 分区
1. 什么是分区
2. 分区形式
3. 查看mysql是否支持分区技术

本例是5.7

首先创建表并为其创建分区,并插入数据,以作测试

下图是插入的数据

去查看物理文件

从information_schema系统库中的partitions表中查看分区信息

从某个分区中查询数据

添加一个分区

合并分区

4. 对比创建分区和没创建分区的性能
首先创建一个表tab1不做分区

创建表tab2按日期的年份拆分

创建一个存储过程,循环向表中存入足够大的数据,用于测试

执行存储过程

将tab1的数据插入到tab2中

执行查询语句测试性能,执行时间短的性能就好

通过explain语句分析执行情况

未分区的表

已分区的表

为两个表创建索引

再次进行测试

三、 Mysql的分区类型
在创建表的时候使用:partition by 类型(字段),定义分区类型及其使用的字段
1. Range
l 基于一个连续区间的列值,把多行分配给分区,区间不能重叠
l 使用values less than操作符定义分区
l 一般最后要创建一个maxvalue分区,用于存放和之前区间不匹配的值

2. List分区
l 基于列值匹配一个离散值(不连续的值)集合中的某个值来进行分区
l 使用:Values in,操作符定义分区
l List没有range中类似于maxvalue的定义符存在,所以要匹配的值都必须手动创建

3. Hash分区
l对表的一个或多个列的hashkey进行计算,最后通过这个Hash码不同数值对应的数据区域进行自动分区,但需要指定分区数量。
lList和range必须指定一个给定的列值或列值集合应该保存在哪个分区中,而在HASH分区中,MYSQL自动完成这些工作。
lHash分区的目的是将数据均匀的分布到预先定义的各个分区中

4. Key分区
l与hash相似,不同在于hash分区是用户自定义函数进行分区,而key分区使用mysql数据库提供的函数进行分区,不同的存储引擎,使用的函数可能不同

5. Columns分区
l从mysql5.5开始支持,可以视为range和list分区的进化,columns分区可以直接使用非×××数据进行分区
lCOLUMNS分区支持以下数据类型:
所有×××,如INTSMALLINT TINYINT BIGINT。FLOAT和DECIMAL则不支持。
日期类型,如DATE和DATETIME。其余日期类型不支持。
字符串类型,如CHAR、VARCHAR、BINARY和VARBINARY。BLOB和TEXT类型不支持。
COLUMNS可以使用多个列进行分区。
6. Mysql分区是可以指定存储位置的,通过查看帮助,我们可以得到更多关于创建表的参数


例:创建分区表,并且将数据文件存放到其他位置,innodb存储引擎,数据文件和索引文件是在一起的,所以只需要指定数据文件的位置


7. 其实hash和key也是根据取余进行分区运算
比如分成4个分区

四、 Mysql分区与分表的区别
1. 实现方式
2. 数据处理
3. 提高性能
4. 实现难易
五、 分区和分表的联系
MySQL性能优化及分区、分表的详细步骤就先给大家讲到这里,对于其它相关问题大家想要了解的可以持续关注我们的行业资讯。我们的板块内容每天都会捕捉一些行业新闻及专业知识分享给大家的。