Mysql性能优化全揭秘-庖丁解牛
「为什么写」
一直想写数据库相关的文章,最直接的原因是数据库这块我们工作中每天都会用到,也是面试求职绕不开的话题,无论你是何种测试,优秀的数据库能力都会非常加分,最近我在总结数据库性能优化这块内容,性能这块就如庖丁解牛,首先你需要知道牛的全貌,筋脉布局,才能解之,今天这篇文章,也先从全局的角度来看数据库性能优化这件事。
「管中窥豹」
我们常常听到一句话,性能优化皆io,可以认为性能优化的核心思想就是减少io操作,之前和一同学聊天,发现不少人认为减少io就是减少磁盘操作,这其实很不全面,Cpu->Cache->Net->Mem->Disk, 每一步都是io,片面的认为磁盘,那你只是看到了牛腿,解不了全牛,下面我罗列的每一块硬件资源,在数据库层面都具备着相应的职能,成本以及开销,如下图a

硬件资源的速度排序大体可以这么认为:CPU>Cache>内存>网络>硬盘,一直说的减少io操作本质是减少性能相对较差的io开销,在性能较好的资源上进行操作,通过图a知道,每一种优化法则都是解决其对应硬件的性能问题,当我们遇到性能问题时,不应该简单说通过加硬件资源去解决,这种解法一般叫做扬汤止沸,解决不了本质问题,而是应当通过我们的图谱或者叫知识体系提出性价比最高的解决方案

「常用的优化手段」
1.表设计(符合3NF)
NF的意思是范式,粗略而言数据库分为三个范式。即:第一范式 第二范式 第三范式。
第一范式的意思是:数据表中的字段都是不可分割的,原子的。第一范式是最简单的,也是必需的。
第二范式:在第一范式的基础上,数据表中各字段和主键之间完全依赖,不存在部分依赖。例如:数据表中存在字段<学号,姓名,分数>组成,其中<学号,姓名>组合在一起构成主键。如果学生的姓名不重复的情况下,那么就存在部分依赖。
第三范式:第二范式的基础上,不存在传递依赖。
所谓传递依赖是指:例如:数据表中存在字段<学号,姓名,分数>组成,其中<学号>是主键。如果学生的姓名不重复的情况下,那么就存在传递依赖。即:学号可以唯一确定姓名,而姓名是不重复的,所以,姓名也可以唯一确定分数。那么,学号决定分数就不唯一了,中间还有姓名可以确定。这就是所谓的传递依赖。
2.优化SQL语句
a.获取到慢sql,processlist,或者慢查询
b.explain 分析
c.索引分析,sql规范分析
d.业务层面逻辑分析
3.分表
a.垂直切分:将同一个表的内容,按照数据热度不同切分字段,按照3nf原则,划分为多个表。
分表理由:根据数据的活跃度进行分离,随着目前nosql的流行,竖直切分用的不多
b.水平切分:把大的表结构,横向切割为同样结构的不同表,表结构是完全一样, 按照数量级切割。
分表理由:根据数据量的规模来划分,保证单表的容量不会太大,保证单表的查询等处理能力。
4. 读写分离
a. 主库update,insert,delete
b. 从库select
5. 存储过程
a.批量运算,执行速度相对较高
b.减少网络开销
6.对mysql配置优化
a.查询排序时所能使用的缓冲区大小 read_buffer_size
b.查询缓存 query_cache_size
c. 最大连接数 max_connections
调优套路之思维导图:

更多交流关注公众号:猿桌派
Mysql性能优化全揭秘-庖丁解牛的更多相关文章
- Mysql性能优化三(分表、增量备份、还原)
接上篇Mysql性能优化二 对表进行水平划分 如果一个表的记录数太多了,比如上千万条,而且需要经常检索,那么我们就有必要化整为零了.如果我拆成100个表,那么每个表只有10万条记录.当然这需要数据在逻 ...
- MySQL性能优化:索引
MySQL性能优化:索引 索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序.数据库使用索引以找到特定值,然后顺指针找到包含该值的行.这样可以使对应于表的SQL语句执 ...
- MySQL性能优化总结
一.MySQL的主要适用场景 1.Web网站系统 2.日志记录系统 3.数据仓库系统 4.嵌入式系统 二.MySQL架构图: 三.MySQL存储引擎概述 1)MyISAM存储引擎 MyISAM存储引擎 ...
- MySQL性能优化总结(转)https://yq.aliyun.com/articles/24249
摘要: 一.MySQL的主要适用场景 1.Web网站系统 2.日志记录系统 3.数据仓库系统 4.嵌入式系统 二.MySQL架构图: 三.MySQL存储引擎概述 1)MyISAM存储引擎 MyIS ...
- MYSQL之性能优化 ----MySQL性能优化必备25条
今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数 ...
- mysql 性能优化常见命令
mysql 性能优化常见命令: 一: 当发现mysql程序运行缓慢时,在排除sql主机问题之后,可以尝试在schema,table,和sql上进一步进行考查: 1:mysql> show ful ...
- MySQL性能优化总结___本文乃《MySQL性能调优与架构设计》读书笔记!
一.MySQL的主要适用场景 1.Web网站系统 2.日志记录系统 3.数据仓库系统 4.嵌入式系统 二.MySQL架构图: 三.MySQL存储引擎概述 1)MyISAM存储引擎 MyISAM存储引擎 ...
- 涨姿势:Mysql 性能优化完全手册
涨姿势:Mysql 性能优化完全手册 深入理解MySQL服务器架构 客户端层 MySQL逻辑架构整体分为三层,最上层为客户端层,诸如:连接处理.授权认证.安全等功能均在这一层处理. 中间层 MySQL ...
- redmine在linux上的mysql性能优化方法与问题排查方案
iredmine的linux服务器mysql性能优化方法与问题排查方案 问题定位: 客户端工具: 1. 浏览器inspect-tool的network timing工具分析 2. 浏览 ...
随机推荐
- 引用dll出现的问题:发生一个或多个错误,引用无效或不支持该引用
获取到新的项目后,然后FineUI就出现黄色的标志,肯定是不可以用的,需要重新引用下. 然后我就开始重新引用下,就出现下面的问题: 因为是购买的UI,一开始我怀疑是引用的版本不一样呢,其实都不是 只需 ...
- Linux系统上安装配置MAVEN
1,下载maven 首先进入maven下载目录:http://maven.apache.org/download.cgi 2,上传maven到linux系统 以下操作路径都是本人习惯,目录可以随意更改 ...
- 2、Automapper安装及配置
一. 安装 我们安装是在 vs 中使用Nuget的方式进行安装 不过安装时需注意一件事情就是,版本问题,我示例使用的是.net framework 4.5.2,所以我安装AutoMapper的版本是7 ...
- Java框架之SpringMVC 03-RequestMapping-请求数据-响应数据
SpringMVC SpringMVC是一种轻量级的.基于MVC的Web层应用框架. 通过一套 MVC 注解,让 POJO 成为处理请求的控制器,而无须实现任何接口. 采用了松散耦合可插拔组件结构,比 ...
- 【红外DDE算法】聊聊红外图像增强算法的历史进程(第一回)
宽动态红外图像增强算法综述回顾过去带你回顾宽动态红外图像增强算法的历史进程,历来学者的一步步革命(新的算法框架提出),一步步改革(改进优化),从简单粗暴到细致全面.正所谓是:改革没有完成时,只有进行时 ...
- 机器学习-向量机SVM
一.介绍 二.编程 1.支持向量机的核函数 import numpy as npimport matplotlib.pyplot as pltfrom sklearn import svmfrom s ...
- HTML 中清除浮动
html中如何清除浮动 在html中,浮动可以说是比较常用的.在页面的布局中他有着很大的作用,但是浮动中存在的问题也是比较多的.现在我们简单说一下怎么去除浮动 首先我们先简单的看一下浮动: 首先我 ...
- 配置虚拟环境(virtualenv+virtualenvwrapper)
安装virtualenv pip3 install virtualenv 安装virtualenvwrapper pip install virtualenvwrapper # Linux使用该条 p ...
- os 模块 的常用方法讲解
import osprint(os.getcwd()) #拿到当前文件的目录os.chdir(r'E:\pycharm 5.3 wenjian weizhi ')#改变当前脚本的工作目录 'r'表示原 ...
- Distance dependent Chinese Restaurant Processes
Here is a note of Distance dependent Chinese Restaurant Processes 文章链接http://pan.baidu.com/s/1dEk7ZA ...