当前位置:首页 > mysql技术文章 > mysql分表和分区的区别浅析

mysql分表和分区有什么区别

  • 发布时间:
  • 作者:码农之家原创
  • 点击:56

这篇文章主要知识点是关于mysql、分表、分区、的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子书

PHP&MySQL跨设备网站开发实例精粹
  • 类型:PHP编程大小:80.9 MB格式:PDF作者:陈惠贞,陈俊荣
立即下载

mysql分表和分区的区别浅析

一、什么是mysql分表和分区

什么是分表,从表面意思上看呢,就是把一张表分成N多个小表

什么是分区,分区呢就是把一张表的数据分成N多个区块,这些区块可以在同一个磁盘上,也可以在不同的磁盘上

二、mysql分表和分区有什么区别呢

1、实现方式上

a)mysql的分表是真正的分表,一张表分成很多表后,每一个小表都是完正的一张表,都对应三个文件,一个.MYD数据文件,.MYI索引文件,.frm表结构文件。

 

 
[root@BlackGhost test]# ls |grep user
alluser.MRG
alluser.frm
user1.MYD
user1.MYI
user1.frm
user2.MYD
user2.MYI
user2.frm

 

简单说明一下,上面的分表呢是利用了merge存储引擎(分表的一种),alluser 是总表,下面有二个分表,user1,user2。他们二个都是独立的表,取数据的时候,我们可以通过总表来取。这里总表是没有.MYD,.MYI这二个 文件的,也就是说,总表他不是一张表,没有数据,数据都放在分表里面。我们来看看.MRG到底是什么东西

 

 
[root@BlackGhost test]# cat alluser.MRG |more
user1
user2
#INSERT_METHOD=LAST

 

从上面我们可以看出,alluser.MRG里面就存了一些分表的关系,以及插入数据的方式。可以把总表理解成一个外壳,或者是联接池。


b)分区不一样,一张大表进行分区后,他还是一张表,不会变成二张表,但是他存放数据的区块变多了。

 

 
[root@BlackGhost test]# ls |grep aa
aa#P#p1.MYD
aa#P#p1.MYI
aa#P#p3.MYD
aa#P#p3.MYI
aa.frm
aa.par

 

从上面我们可以看出,aa这张表,分为二个区,p1和p3,本来是三个区,被我删了一个区。我们都知道一张表对应三个文 件.MYD,.MYI,.frm。分区呢根据一定的规则把数据文件和索引文件进行了分割,还多出了一个.par文件,打开.par文件后你可以看出他记录 了,这张表的分区信息,根分表中的.MRG有点像。分区后,还是一张,而不是多张表。

2、数据处理上

a)分表后,数据都是存放在分表里,总表只是一个外壳,存取数据发生在一个一个的分表里面。看下面的例子:

select * from alluser where id='12'表面上看,是对表alluser进行操作的,其实不是的。是对alluser里面的分表进行了操作。

b)分区呢,不存在分表的概念,分区只不过把存放数据的文件分成了许多小块,分区后的表呢,还是一张表。数据处理还是由自己来完成。

3、提高性能上

a)分表后,单表的并发能力提高了,磁盘I/O性能也提高了。并发能力为什么提高了 呢,因为查寻一次所花的时间变短了,如果出现高并发的话,总表可以根据不同的查询,将并发压力分到不同的小表里面。磁盘I/O性能怎么搞高了呢,本来一个 非常大的.MYD文件现在也分摊到各个小表的.MYD中去了。

b)mysql提出了分区的概念,我觉得就想突破磁盘I/O瓶颈,想提高磁盘的读写能力,来增加mysql性能。
在这一点上,分区和分表的测重点不同,分表重点是存取数据时,如何提高mysql并发能力上;而分区呢,如何突破磁盘的读写能力,从而达到提高mysql性能的目的。

4、实现的难易度上

a)分表的方法有很多,用merge来分表,是最简单的一种方式。这种方式根分区难易度差不多,并且对程序代码来说可以做到透明的。如果是用其他分表方式就比分区麻烦了。

b)分区实现是比较简单的,建立分区表,根建平常的表没什么区别,并且对开代码端来说是透明的。

三、mysql分表和分区有什么联系呢

1,都能提高mysql的性高,在高并发状态下都有一个良好的表面。

2,分表和分区不矛盾,可以相互配合的,对于那些大访问量,并且表数据比较多的表,我们可以采取分表和分区结合的方式(如果merge这种分表方式,不能和分区配合的话,可以用其他的分表试),访问量不大,但是表数据很多的表,我们可以采取分区的方式等。

以上就是本次给大家分享的关于java的全部知识点内容总结,大家还可以在下方相关文章里找到相关文章进一步学习,感谢大家的阅读和支持。

推荐内容

idea2020注册激活码(激活到2100年)

实例分析Java实现的zip压缩及解压缩工具类

python3 pandas 如何读取MySQL数据和插入

ThinkPHP3.2.3框架如何实现分页功能

深入理解JS函数stack size计算方法

展开 +

收起 -

MySQL 相关电子书
学习笔记
网友NO.549526

mysql 5.7.20╲5.7.21 免安装版安装配置教程

mysql 下载安装配置 5.7.20 / 5.7.21,供大家参考,具体内容如下 1、下载mysql,下载地址 选择操作系统和版本,我是64位win10,点击 Download 后会跳到Oracle登录页面要求登录后才能下载: 登录后下载: 2、下载完成后解压: 3、在mysql要目录下创建 my.ini 文件,如上图,文件内容如下,basedir 和 datadir 修改为相应地址: [mysql] # 设置mysql客户端默认字符集 default-character-set=utf8 [mysqld] #设置3306端口 port = 3306 # 设置mysql的安装目录 basedir=D:/tools/ent/db/mysql-5.7.20-winx64 # 设置mysql数据库的数据的存放目录 datadir=D:/tools/ent/db/mysql-5.7.20-winx64/data # 允许最大连接数 max_connections=200 # 服务端使用的字符集默认为8比特编码的latin1字符集 character-set-server=utf8 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB 4、cmd进入bin目录下,执行 mysqld --initialize-insecure \mysql-5.7.20-winx64\binmys……

网友NO.121200

mysql grants小记

安装mycheckpoint的时候,给这个监控用户分权限的时候,发现了这个秘密: mysql mysql GRANT ALL PRIVILEGES ON mycheckpoint.* TO 'mycheckpoint_user'@'localhost' IDENTIFIED BY '123456'; ERROR 1470 (HY000): String 'mycheckpoint_user' is too long for user name (should be no longer than 16) mysql grant命令是对mysql数据库进行用户创建,权限或其他参数控制的强大的命令,官网上介绍它就有几大页,要用精它恐怕不是一日半早的事情,权宜根据心得慢慢领会吧! grant命令的简单介绍是这样的: The GRANT statement enables system administrators to grant privileges to MySQL user accounts. GRANT also serves to specify other account characteristics such as use of secure connections and limits on access to server resources. To use GRANT, you must have the GRANT OPTION privilege, and you must have the privileges that you are granting. 这段话的意思是说:grant命令允许系统管理员对mysql 用户账号(……

网友NO.722097

集群运维自动化工具ansible使用playbook安装mysql

上次介绍了如何使用ansible playbook安装zabbix客户端(//www.jb51.net/article/52158.htm),这次介绍一下如何使用playbook安装mysql。 下面是安装mysql的信息: mysql_basedir: /data/mysql/basedir 源码目录mysql_datadir: /data/mysql/datadir 数据目录mysql_user: mysql mysql用户mysql_database_user: root 数据库用户mysql_passwd: 'E4yR3WnoluSFTCBAI' 数据库密码mysql_port: 3306 mysql监听端口mysql_sock: /data/mysql/datadir/mysql.sock mysql的sockmysql_charset: utf8 mysql字符集mysql_collation: utf8_general_ci mysql排序方式mysql_version: Percona-Server-5.5.21-rel25.1.tar.gz mysql版本 下面是安装mysql的playbook结构 10:24:06 # tree mysql_*mysql_delete├── files├── handlers├── meta│ └── main.yml├── tasks│ ├── delete.yml│ └── main.yml├── templates└── vars └── main.ymlmysql_install├── files│ └── mysql.tar.gz├── handlers├── meta│ └── main……

网友NO.959670

MySQL入门教程(七)之视图

相关阅读: MySQL入门教程(五)之表的创建、修改和删除 视图是从一个或多个表中导出来的虚拟表。视图就像一个窗口,通过这个窗口可以看到系统专门提供的数据。 1、视图简介 1.1 视图的含义 视图是从一个或多个表中导出来的虚拟表,还可以从已经存在的视图的基础上定义。 数据库中只存放视图的定义,而不存放视图中的数据,这些数据仍存放在原来的表中。一旦表中的数据发生变化,显示在视图中的数据也会相应变化。 MySQL的视图并不支持输入参数的功能,即交互性上较差,但对于变化不是很大的操作,使用视图可以很大程度上简化用户的操作。 1.2 视图的作用 视图起着类似于筛选的作用,具体可归纳为 (1)所见即所需,使操作简单化 (2)通过视图,用户只能查询和修改指定的数据,从而限制了用户的权限,增加了数据的安全性 (3)视图……

网友NO.136527

Navicat中导入mysql大数据时出错解决方法

Navicat 自己到处的数据,导入时出现无法导入的情况。 最后选择利用MySQL命令导入方式完成数据导入 用到命令 use 快捷方式 \u source 快捷方式 \. 快捷方式可以通过help查询 mysql\u dataname mysql\. d:\mysql\dataname.sql 导入时碰到问题及解决方法 导入时中文乱码 解决方法: 在用Navicat导出时用的是UTF8编码,导入时MySQL用自己默认的编码方式导入,中文产生了乱码 用命令查询 mysqlshow variables like '%char%'; 查询看到编码是gbk 然后查到的全部用 mysqlset character_set_results=utf8; mysqlset .....(类同都修改成utf8) 再次执行导入,OK!编码正常,成功导入。 ……

<
1
>

电子书 编程教程 文档 软件 源码 视频

Copyright 2018-2020 xz577.com 码农之家

本站所有电子书资源不再提供下载地址,只分享来路

免责声明:网站所有作品均由会员网上搜集共同更新,仅供读者预览及学习交流使用,下载后请24小时内删除

版权投诉 / 书籍推广 / 赞助:QQ:520161757