Mysql5.7——分表和分区

mysq中有一种机制是表锁定和行锁定,是为了保证数据的完整性。表锁定表示你们都不能对这张表进行操作,必须等我对表操作完才行。行锁定也一样,别的sql必须等我对这条数据操作完了,才能对这条数据进行操作。当出现这种情况时,我们可以考虑分表或分区。

一、分表

分表是将一个大表按照一定的规则分解成多张具有独立存储空间的实体表,每个表都对应三个文件,MYD数据文件,.MYI索引文件,.frm表结构文件。这些表可以分布在同一块磁盘上,也可以在不同的机器上。app读写的时候根据事先定义好的规则得到对应的表名,然后去操作它。分表的目的就是减小数据库的负担,缩短查询时间。

1、分表的类型

(1)垂直切分

是指数据表列的拆分,把一张列比较多的表拆分为多张表。

(2)水平切分

是指数据表行的拆分,把一张的表的数据拆成多张表来存放。

2、利用merge存储引擎来实现分表

(1)创建一个完整表,存储着所有的成员信息(表名为member)

(2)把member分成两个表tb_member1,tb_member2

(3)查看tb_member表的结构

注:查看子表和主表的字段定义要一致

(4)把数据分到两个表中:

注:总表只是一个外壳,存取数据发生在一个一个的子表里面。

每个子表都有自己独立的相关表文件,而主表只是一个壳,没有完整的相关表文件

二、分区

分区和分表相似,都是按照规则分解表。不同在于分表将大表分解为若干个独立的实体表,而分区是将数据分段划分在多个位置存放,分区后,表还是一张表,但数据散列到多个位置了。app读写的时候操作的还是表名字,db自动去组织分区的数据。

1、分区的两种形式

(1)水平分区

对表的行进行分区,所有在表中定义的列在每个数据集中都能找到,所以表的特性依然得以保持。

(2)垂直分区

是通过对表的垂直划分来减少目标表的宽度,使某些特定的列被划分到特定的分区,每个分区都包含了其中的列所对应的行。

2、分区的技术支持

3、测试

(1)创建range分区表

(2)插入一些数据

(3)到存放数据库文件的地方看一下

4、分区的合并和删除

5、分区表和未分区表的性能测试

结果表明分区表比未分区表的执行时间少的多。

通过explain语句分析执行情况

创建索引后测试

创建索引后分区表和未分区表相差不大

6、将不同分区放到不同存储位置

(1)建表时,提前创建好存储目录,并授权给mysql;

(2)创建表格

(3)查看分区情况

查看默认数据存储位置的文件:

Mysql分区类型:

RANGE分区、LIST分区、HASH分区、key分区、columns分区

三、Mysql分表和分区的区别

原文发布于微信公众号 - L宝宝聊IT(gh_b0e552aa80db)

原文发表时间:2018-08-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏开发技术

cassandra简单介绍与基本操作

  项目中用到了cassandra,用来存储海量数据,且要有高效的查询;本博客就进行简单的介绍和进行一些基本的操作

1082
来自专栏JAVA高级架构

关于 MySQL 的知识点与面试常见问题都在这里

img垂直拆分的优点: 可以使得行数据变小,在查询时减少读取的Block数,减少I/O次数。此外,垂直分区可以简化表的结构,易于维护。 垂直拆分的缺点: 主键会...

2093
来自专栏Danny的专栏

PL/SQL和SQLPLUS查询结果不一样——千万别忘记commit !

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

1722
来自专栏CodingToDie

MySQL MVCC(多版本控制)

MySQL 提供了两种事务型的存储引擎:InnoDB 和 NDB Cluster 。另外还有一些第三方存储引擎也支持事务

3055
来自专栏Java进阶架构师

「mysql优化专题」详解引擎(InnoDB,MyISAM)的内存优化攻略?(9)

InnoDB用一块内存区域做I/O缓存池,该缓存池不仅用来缓存InnoDB的索引块,而且也用来缓存InnoDB的数据块。

1422
来自专栏芋道源码1024

关于 MySQL 的知识点与面试常见问题都在这里

Mysql开发技巧: MySQL开发技巧(一)  MySQL开发技巧(二)  MySQL开发技巧(三)

1680
来自专栏用户2442861的专栏

MySQL学习笔记_如何选择合适的存储引擎

http://www.cnblogs.com/huligong1234/archive/2012/06/10/2544154.html

873
来自专栏数据库

Java EE之旅07-数据库基础(1)

数据库概述 数据库(DataBase,简称DB):指长期保存在计算机的存储设备上,按照一定规则组织起来,可以被各种用户或应用共享的数据集合。(属于文件系统) 数...

22310
来自专栏JAVA高级架构

MySQL 调优/优化的 100 个建议

MySQL是一个强大的开源数据库。随着MySQL上的应用越来越多,MySQL逐渐遇到了瓶颈。这里提供 101 条优化 MySQL 的建议。有些技巧适合特定的安装...

3894
来自专栏Java成神之路

简单分析什么是SQL注入漏洞

现在很多人在入侵的过程中基本都是通过SQL注入来完成的,但是有多少人知道为什么会有这样的注入漏洞呢?有的会随口说着对于字符的过滤不严造成的。但是事实是这样吗?我...

8652

扫码关注云+社区

领取腾讯云代金券