Mysql的水平分表与垂直分表的讲解
在我上一篇文章中说过,mysql语句的优化有局限性,mysql语句的优化都是围绕着索引去优化的,那么如果mysql中的索引也解决不了海量数据查询慢的状况,那么有了水平分表与垂直分表的出现(我就是记录一下自己的理解)
水平分表:
如上图所示:另外三张表表结构是一样的 只不过把数据进行分别存放在这三张表中,如果要insert 或者query 那么都需要对id进行取余 然后table名进行拼接,那么就是一张完整的table_name
但是如果我需要对name进行分表呢 或者对email呢?
那么就需要用MD5进行加密 因为MD5加密后是16进制 那么就就可以进行取余,思路同上。
垂直分表:
为什么需要进行垂直分表?
因为如果一张表中 有一个大字段 而且并不是必须要展示的或者不是当前需要用的 那么虽然没有刻意去查询 但是在根据id或者其他索引进行查询的时候就会把大字段一起查出来,会严重影响查询的性能,所以才有的垂直分表
详细请看下图:
以上就是水平分表和垂直分表的一种思路,水平有限 不足之处 请指出 谢谢
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接
相关推荐
-
Tomcat+Mysql高并发配置优化讲解
1.Tomcat优化配置 (1)更改Tomcat的catalina.bat 将java变成server模式,增大jvm的内存,在文件开始位置增加 setJAVA_OPTS=-server -Xms1024m -Xmx2048m -Xss512K -XX:PermSize=128m-XX:MaxPermSize=256m setCATALINA_OPTS=-server -Xms512m -Xmx512m 如下图: Xms:初始内存 Xmx:最大内存 (2)更改Tomcat的Server.xml
-
MySQL存储文本和图片的方法
Oracle中大文本数据类型 Clob 长文本类型 (MySQL中不支持,使用的是text) Blob 二进制类型 MySQL数据库 Text 长文本类型 TINYTEXT: 256 bytes TEXT: 65,535 bytes => ~64kb MEDIUMTEXT: 16,777,215 bytes => ~16MB LONGTEXT: 4,294,967,295 bytes => ~4GB Blob 二进制类型 例如: 建表 CREATE TABLE test( id INT
-
nodejs同步调用获取mysql数据时遇到的大坑
mysql调用获取数据,只能是异步方式返回结果,不能同步获取结果,因此,须在回调函数中编写处理事件.期间看了下Aysnc.js,是用于多个要返回回调函数的事件,将这些事件有序的组织起来,最后只返回一个回调函数,并没有改变异步的本质,而是将多个异步整合为一个异步,从而满足写程序的需求. 错误示范 获取数据库中的数据函数 var _getUser = function(name) { var sql = "SELECT * FROM " + TABLE + " WHERE use
-
阿里云esc服务器Docker部署单节点Mysql的讲解
1.下载加速版msyql docker pull hub.c.163.com/library/mysql:5.7 2.更名 docker tag hub.c.163.com/library/mysql:5.7 mysql:5.7 3.启动 docker run -it --rm --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql 4.设置mysql远程登录 docker exec -it mysql bash my
-
MySQL存储引擎MyISAM与InnoDB区别总结整理
1.MySQL默认存储引擎的变迁 在MySQL 5.1之前的版本中,默认的搜索引擎是MyISAM,从MySQL 5.5之后的版本中,默认的搜索引擎变更为InnoDB. 2.MyISAM与InnoDB存储引擎的主要特点 MyISAM存储引擎的特点是:表级锁.不支持事务和全文索引,适合一些CMS内容管理系统作为后台数据库使用,但是使用大并发.重负荷生产系统上,表锁结构的特性就显得力不从心: 以下是MySQL 5.7 MyISAM存储引擎的版本特性: InnoDB存储引擎的特点是:行级锁.事务安全(A
-
Mysql如何适当的添加索引介绍
这里先简单介绍一下索引: 添加索引是为了提高数据库查询性能,索引是最物美价廉的东西了,不用加内存,不用改程序,不用调sql,只要执行个正确的create index ,查询的速度就可能提高百倍千倍,这可是有诱惑力的,可是天下没有没费的午餐,查询的速度的提高是以牺牲insert update delete的速度为代价的.而且索引大小一般是数据的三分之一 ,再加上索引要加载进内存的,如果全部字段都加索引会以牺牲内存为代价的,所以才要设当的添加索引. 这里简单介绍一下mysql中常用索引: 在添加索
-
为什么MySQL数据库索引选择使用B+树?
在进一步分析为什么MySQL数据库索引选择使用B+树之前,我相信很多小伙伴对数据结构中的树还是有些许模糊的,因此我们由浅入深一步步探讨树的演进过程,在一步步引出B树以及为什么MySQL数据库索引选择使用B+树! 学过数据结构的一般对最基础的树都有所认识,因此我们就从与我们主题更为相近的二叉查找树开始. 一.二叉查找树 (1)二叉树简介: 二叉查找树也称为有序二叉查找树,满足二叉查找树的一般性质,是指一棵空树具有如下性质: 1.任意节点左子树不为空,则左子树的值均小于根节点的值: 2.任意节点右子
-
Mysql忘记密码的几种解决方案
解决办法1 卸载完全,删除所有数据,先关闭跟MySql所有有关的进程,进入命令行(cmd)中输入taskkill /f /im mysqld-nt.exe 然后找到MySql的根目录删除即可 解决办法2 在命令行里面输出密码或者更更改密码 .在命令行运行:taskkill /f /im mysqld-nt.exe 下面的操作是操作mysql中bin目录下的一些程序,如果没有配置环境变量的话,需要切换到mysql的bin 目录下执行如下语句.不然无效 .继续在命令行运行:mysqld-nt --s
-
Ubuntu上mysql的安装及使用(通用版)
不管是哪个版本的Ubuntu,安装mysql数据库基本上都是大同小异.下面介绍一下具体的安装步骤: 1.打开终端,并取得root权限 2.在终端输入: apt-get install mysql-server apt-get install mysql-client apt-get install libmysqlclient-dev 安装过程中,必要的地方需要输入"Y"进行确定. 上面这三条命令执行完以后,要想检测mysql是否安装成功,可输入下面的命令进行查看: netstat -
-
将图片储存在MySQL数据库中的几种方法
通常对用户上传的图片需要保存到数据库中. 解决方法一般有两种: 1.将图片保存的路径存储到数据库: 2.将图片以二进制数据流的形式直接写入数据库字段中. 以下为具体方法: 一.保存图片的上传路径到数据库: string uppath="";//用于保存图片上传路径 //获取上传图片的文件名 string fileFullname = this.FileUpload1.FileName; //获取图片上传的时间,以时间作为图片的名字可以防止图片重名 string dataName = D
随机推荐
- mysql socket文件作用详解
- 巧用CSS的MASK滤镜
- JS中JSON对象和String之间的互转及处理技巧
- php+mysql结合Ajax实现点赞功能完整实例
- 用实例分析Python中method的参数传递过程
- Easy.Ajax 部分源代码 支持文件上传功能, 兼容所有主流浏览器
- Yii2 hasOne(), hasMany() 实现三表关联的方法(两种)
- php生成图片验证码-附五种验证码
- 深入SQL中PIVOT 行列转换详解
- iOS从系统相册选取多张照片示例代码
- The remote procedure call failed and did not execute的解决办法
- JavaScript类型系统之基本数据类型与包装类型
- Android4.X读取SIM卡短信和联系人相关类实例分析
- javascript背投广告代码的完善
- 网线破损导致“网络风暴”
- J2EE验证码图片如何生成和点击刷新验证码
- .tel域名正式开放注册 把握先机赢商机
- 详解supervisor使用教程
- Android 实现背景图和状态栏融合方法
- 使用classList来实现两个按钮样式的切换方法