垂直分表

垂直分表就是一个包含有很多列的表拆分成多个表,比如表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表结构文件。

mysql如何分表_MySQL分表和分区的具体实现方法相关推荐

  1. mysql简单分表_mysql分区分表哪个好

    一,什么是e69da5e6ba9062616964757a686964616f31333365633933mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看mys ...

  2. mysql分表_mysql分表详解

    经常听到有人说"数据表太大了,需要分表","xxxx了,要分表"的言论,那么,到底为什么要分表? 难道数据量大就要分表? mysql数据量对索引的影响 本人my ...

  3. mysql.user表_mysql.user表详解

    GRANT语法: GRANT 权限 ON 数据库.* TO 用户名@'登录主机' IDENTIFIED BY '密码' 权限: ALL,ALTER,CREATE,DROP,SELECT,UPDATE, ...

  4. mysql unicode转汉字_Mysql数据库表引擎与字符集

    Mysql数据库表引擎与字符集 1.服务器处理客户端请求 其实不论客户端进程和服务器进程是采用哪种方式进行通信,最后实现的效果都是:客户端进程向服务器进程发送一段文本(MySQL语句),服务器进程处理 ...

  5. mysql 压缩表_MySQL InnoDB 表压缩(行格式压缩)

    MySQL InnoDB支持数据压缩,有两种数据压缩方式,第一种为表压缩,通常也称之为行格式压缩,另外一种是页压缩,页压缩对操作系统及文件系统有一定的要求.本文主要介绍表压缩(行格式压缩)的原理及使用 ...

  6. mysql设计功能设置表_MySQL数据表的设计

    数据表(Table) 数据表是数据库的基本组成元素,以记录(行)和字段(列)组成的二位结构用于储存数据.数据库由表结构和表内容组成,先建立表结构,然后才能输入数据.数据表结构设计主要包括字段名称,字段 ...

  7. mysql 用户管理表_Mysql—用户表详解(mysql.user)

    MySQL 数据库 Mysql-用户表详解(mysql.user) MySQL是一个多用户管理的数据库,可以为不同用户分配不同的权限,分为root用户和普通用户,root用户为超级管理员,拥有所有权限 ...

  8. mysql 优化 修复原理_mysql下表的修复与优化

    在很多的linux生产服务器里很多时候用数据库是mysql,在数据库里算是轻量级的数据库,但是长期以来的使用往往会出现一些问题,一般的状况是无法读取表,此时我们就要来修复表.优化表,减小磁盘使用量,以 ...

  9. mysql分析表_MySQL分析表有什么用

    MySQL中使用ANALYZE TABLE语句来分析表,该语句的基本语法如下: ANALYZE TABLE 表名1 [,表名2-] ; 使用ANALYZE TABLE分析表的过程中,数据库系统会对表加 ...

最新文章

  1. React后台管理系统-商品列表搜索框listSearch组件
  2. Design Pattern - Prototype(C#)
  3. mysql建表以及列属性
  4. boost::core模块实现np地址
  5. SQLSetEnvAttr
  6. PHP与SQL注入攻击
  7. Codeforces Round #620 (Div. 2) F2. Animal Observation (hard version) dp + 线段树
  8. 大一计算机在线考试,大一计算机考试题(含答案).pdf
  9. 关于Linux下使用Windows应用程序的尝试总结
  10. 从零开始学建站-域名篇
  11. 用命令行建立空白的simulink模型(mdl文件)(Matlab)
  12. qt qtableview 刷新列表_qt qtableview基本用法
  13. 程序员是不是青春饭?年纪大了何去何从
  14. mac上chrome插件安装
  15. 企业微信号自定义菜单
  16. 南昌航空大学计算机专业好吗,南昌航空大学王牌专业是什么
  17. P1252 马拉松接力赛
  18. php提取字符串中数字,php提取字符串中的数字教程
  19. java通过反射调用方法_Java_通过反射调用类中的方法
  20. 重磅炸弹 诺基亚N71简体中文版全国抢先预览

热门文章

  1. 自己装修需要做好哪些准备?极家精装好不好?
  2. 内部表外部表的操作与区别
  3. BUG的优先级(Priority)和严重程度(Severity)Blocker, Critical, Major, Minor/Trivial
  4. 人员管理KPI和OKR
  5. 基于Android+Node.js的智能语音报纸OCR识别阅读器
  6. NetLogo学习笔记
  7. .Hisi 3516d_ov4689_5658调试
  8. 启动远程桌面连接的方法
  9. 【转载】CRC16大全
  10. PS2 玩USB ISO游戏的方法