这篇文章主要介绍了MySQL分表和分区的具体实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

垂直分表

垂直分表就是一个包含有很多列的表拆分成多个表,比如表A包含20个字段,现在拆分成表A1和A2,两个表各十个字段(具体如何拆根据业务来选择)。

优势:在高并发的情境下,可以表锁和行锁的次数。

劣势:在数据记录非常大的情况下,读写速度还是会遇到瓶颈。

水平分表

假如某个网站,它的数据库的某个表已经达到了上亿条记录,那么此时如果通过select去查询,在没有索引的情况下,他的查询会非常慢,那么就可以通过hash算法将这个表分成10个子表(此时每个表的 的数据量只有1000万条了)。

同时生成一个总表,记录各个子表的信息,假如查询一条id=100的记录,它不再需要全表扫描,而是通过总表找到该记录在哪个对应的子表上,然后再去相应的表做检索,这样就了IO压力。

劣势:会给前端程序应用程序的SQL代码的维护带来很大的麻烦,这时候可以使用MySQL的Merge存储引擎实现分表。

用Merge存储引擎分表,对应用程序的SQL语句来说是的,不需要修改任何代码。

CREATE TABLE t1 ( a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, message CHAR(20));
CREATE TABLE t2 ( a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, message CHAR(20));
INSERT INTO t1 (message) VALUES ('Testing'),('table'),('t1');
INSERT INTO t2 (message) VALUES ('Testing'),('table'),('t2');
CREATE TABLE total (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, message CHAR(20)) ENGINE=MERGE UNION=(t1,t2) INSERT_METHOD=LAST;

在创建total表的时候可能报错:

Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist

实际上merge存储引擎是一个虚拟的表,对应的实际表必须是myisam类型的表,如果你的mysql是5.1以上版本,默认数据库使用的事InnoDB存储引擎的,所以在创建total时,t1和t2表必须是myisam存储引擎的。

如果需要定期增加分表,只需要修改merge表的union即可。

CREATE TABLE t3( a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, message CHAR(20));
ALTER TABLE total UNION=(t1,t2,t3)

横向分区

举例说明:假如有100W条数据,分成十份,前10W条数据放到第一个分区,第二个10W条数据放到第二个分区,依此类推。取出一条数据的时候,这条数据包含了表结构中的所有字段,横向分区并没有改变表的结构。

纵向分区

举例说明:在设计用户表的时候,开始的时候没有考虑好,而把个人的所有信息都放到了一张表里面去,这个表里面就会有比较大的字段,如个人简介,而这些简介呢,也许不会有好多人去看,所以等到有人要看的时候,再去查找,分表的时候,可以把这样的大字段,分开来

完整的一张表,都对应三个文件,一个.MYD数据文件,.MYI索引文件,.frm表结构文件。

最新资讯
腾讯任宇昕:未成年人保护是腾讯发展的生命线

腾讯任宇昕:未成年人保

今年内将把腾讯旗下所有游戏接入防沉迷系统,不能接入的
陆奇:创新推动社会进步 技术是创新最持久的驱动力

陆奇:创新推动社会进步

陆奇表示,创新推动社会进步,技术是创新最大最持久的驱动
豆瓣动态恢复正常 此前称“功能正在升级”

豆瓣动态恢复正常 此

豆瓣动态目前恢复正常,用户已经可以正常查看所关注用户
滴滴自动驾驶或将于年底落地上海

滴滴自动驾驶或将于年

目前,滴滴已经在上海取得自动驾驶路测牌照,前期预计将投
FB被指滥用面部识别数据 或将面临350亿美元集体诉讼

FB被指滥用面部识别数

据外媒报道,在伊利诺伊州的一场涉及滥用面部识别数据的
结构性存款大变局:支付宝微信京东App代销或终结?

结构性存款大变局:支

根据央行发布数据测算,结构性存款规模在今年2月达到峰
最新文章
mysql语句查询用户权限过程详解

mysql语句查询用户权

这篇文章主要介绍了mysql语句查询用户权限过程详解,授
MySQL表中添加时间戳的几种方法

MySQL表中添加时间戳

这篇文章主要介绍了MySQL表中添加时间戳的几种方法,有
MySQL如何实现负载均衡功能

MySQL如何实现负载均

这篇文章主要介绍了MySQL如何实现负载均衡功能,学习过
简单了解标准SQL的update语句三种用法

简单了解标准SQL的upd

这篇文章主要介绍了简单了解标准SQL的update语句三种
java连不上mysql8.0问题的解决方法

java连不上mysql8.0问

这篇文章主要为大家详细介绍了java连不上MySQL8.0问题
MySQL5.7.23解压版安装教程图文详解

MySQL5.7.23解压版安

这篇文章主要介绍了MySQL5.7.23解压版安装教程图文详