MySQL的性能优化主要分为以下四个方面

  • 设计: 存储引擎、字段类型、范式与逆范式

  • 功能: 索引、缓存、分库分表、数据库连接池

  • 架构上: 读写分离、集群、均衡负载

  • 合理的SQL: 测试、优化查询语句、Explain查询执行计划、慢日志

1.硬件层面的优化

从硬件层面上看,影响 mysql 的性能因素,包括 磁盘读写速度网络带宽内存大小

2.架构设计

MySQL 是一个磁盘IO访问,非常频繁的关系型数据库,在高并发和高性能的场景中,MySQL数据库必然会承受巨大的并发压力,在此时我们的优化的方式,主要可以分为几个部分:

  1. 搭建MySQL主从集群,单个MySQL服务容易去导致单点故障,一旦服务宕机,将会导致依赖MySQL数据库的应用,全部无法响应,主从集群或者主主集群,都可以去保证服务的高可用性。

  2. 读写分离设计,在读多写少的场景中,通过读写分离的方案,可以去避免读写冲突,导致的性能问题。

  3. 引入分库分表的机制,通过分库可以降低单个服务器一个IO压力。通过分表的方式,降低单表数据量,从而去提升sql的查询效率

  4. 针对热点数据,可以引入更为高效的分布式数据库,如RedisMongoDB等,他们可以很好的减轻MySQL的访问压力,同时还能提升数据的检索性能

3. 表的设计

3.1 字段的选择

尽可能小(占用存储空间少)、尽可能定长(占用存储空间固定)、尽可能使用整数

3.2 范式与逆范式

为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。

  • 第一范式1NF,原子性,确保每列保持原子性,所有字段值都是不可分解的原子值

  • 第二范式2NF,消除部分依赖,主键列与非主键列遵循完全函数依赖关系,确保表中的每列都和主键相关

  • 第三范式3NF,消除传递依赖,非主键列之间没有传递函数依赖关系索引,确保每列都和主键列直接相关,而不是间接相关

逆范式是指打破范式,通过增加冗余或重复的数据来提高数据库的性能

3.3 拆表

垂直拆分



垂直拆分应该注意的点:

  • 不经常使用的字段放在一张表上

  • 经常组合查询的字段放在一张表上

  • text等大字段拆分出来,放在一张表里

水平拆分



水平拆分时需要注意的点:

  • 一般使用取模的方法进行表的拆分。也可以根据年份、地区等实际业务逻辑拆分。

  • 主键应该去掉 auto_increment 的设置

3.配置优化

  • MySQL 5.7版本默认的最大连接数是151个,这个值可以再my.cnf中去修改。

4.SQL的执行优化

  1. 慢SQL的定位和排查,我们可以通过慢查询日志和慢查询日志工具分析,得到有问题的SQL列表

  2. 执行计划分析,针对慢SQL我们可以使用关键字explain来去查看当前sql的执行计划,可重点关注type,key,rows,filterd等字段,从而去定位该SQL执行慢的根本原因,再去有的放矢的进行优化

  3. 使用show profile工具,这个工具是MySQL提供的可以用来分析当前会话中SQL语句资源消耗情况的工具,可以用于SQL调优的测量,在当前会话中,默认情况下,show profile是关闭状态,打开以后会保存,最近15次的运行结果,针对运行慢的SQL通过profile工具进行详细分析,可以得到SQL执行过程中所有资源的开销情况,比如io开销,cpu开销,内存开销

参考文献

https://blog.csdn.net/weixin_44161207/article/details/123438831

Mysql的性能优化方案的更多相关文章

  1. mysql 性能优化方案

    网 上有不少MySQL 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦与复杂,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果 ...

  2. mysql 性能优化方案1

    网 上有不少mysql 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦与复杂,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果 ...

  3. mysql 性能优化方案 (转)

    网 上有不少mysql 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦与复杂,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果 ...

  4. 老李分享:MySql的insert语句的性能优化方案

    老李分享:MySql的insert语句的性能优化方案   性能优化一直是测试人员比较感兴趣的内容,poptest在培训学员的时候也加大了性能测试调优的方面的内容,而性能优化需要经验的积累,经验的积累依 ...

  5. Redmine性能优化方案

    近来公司redmine服务器表现很糟糕,在16核,64GRAM的机器上,压测结果竟然只有每秒5~7个请求,部分页面一个都出不来. 以下是我对Redmine性能优化方案: redmine服务器性能问题排 ...

  6. DedeCMS数据负载性能优化方案简单几招让你提速N倍

    前文介绍了DedeCMS栏目列表页实现完美分页的方法,避免了大部分重复栏目标题对搜索引擎的影响,对SEO更有利.今天,分享一下DedeCMS数据负载性能优化的方法. 接触织梦也有三年多时间了,对它可谓 ...

  7. 优秀后端架构师必会知识:史上最全MySQL大表优化方案总结

    本文原作者“ manong”,原创发表于segmentfault,原文链接:segmentfault.com/a/1190000006158186 1.引言   MySQL作为开源技术的代表作之一,是 ...

  8. MySQL 大表优化方案(长文)

    当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ...

  9. 到底该不该使用存储过程 MySQL查询性能优化一则

    到底该不该使用存储过程   看到<阿里巴巴java编码规范>有这样一条 关于这条规范,我说说我个人的看法 用不用存储过程要视所使用的数据库和业务场景而定的,不能因为阿里巴巴的技术牛逼,就视 ...

  10. DB-MySQL:MySQL 语句性能优化

    ylbtech-DB-MySQL:MySQL 语句性能优化 1.返回顶部 1. MySQL概述1.数据库设计 3范式2.数据库分表分库---会员系统() 水平分割(分页如何查询)MyChar .垂直3 ...

随机推荐

  1. 使用云服务器配置MariaDB环境,Navicat远程连接一直出错误代码 "2002 - Can't connect to server on '' (10060)"

    使用腾讯云或者阿里云的服务器配置MariaDB数据库环境的时候,用Navicat远程连接在Centos7的Linux上配置MariaDB数据库环境的时候一直出错误代码 "2002 - Can ...

  2. 功放世界web新手区

    第一题:view_source: 顾名思义就是查看网页源代码,按一下f12就ok 第二题:robots协议 换言之就是,robots协议告诉了我们,什么可以爬,什么不可以爬,要是觉得坐牢没什么,那就可 ...

  3. brew基本操作指南

    brew安装: /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)&q ...

  4. JZOJ 【2021.11.10NOIP提高组联考】

    简要题解 这套题比较 \(H_2O\) 建议题目背景美文共赏 \(\text{T1}\) 显然一个 \(O(n^3)\) 不能过的 \(dp\) 然而过了?! 用心在该卡时间的地方卡一卡 \(\tex ...

  5. 有理数四则运算 PTA1034

    题目:https://pintia.cn/problem-sets/994805260223102976/problems/994805287624491008 本题要求编写程序,计算 2 个有理数的 ...

  6. 基于C++的OpenGL 09 之材质

    1. 引言 本文基于C++语言,描述OpenGL的材质 前置知识可参考: 基于C++的OpenGL 08 之基础光照 - 当时明月在曾照彩云归 - 博客园 (cnblogs.com) 笔者这里不过多描 ...

  7. 基于shp2pgsql将shape文件导入到postgresql中

    1. 概述 Shapefile是常用的空间数据文件格式,PostgreSQL数据库是常用的关系型数据库 PostGIS是一个PostgreSQL的空间数据库扩展 ,提供空间信息服务功能,更详细的信息可 ...

  8. 多资产VAR风险--基于python处理

    一.数据准备,先在excel表格上计算每日的波动率: excel数据为: 二.数据导入: import pandas as pd import numpy as np import akshare a ...

  9. No.2.4

    Flex布局 主轴方向:(使用flex-direction改变元素排列方向) 思考:Flex布局模型中,弹性盒子默认沿着哪个方向排列? 水平方向 思考:如何实现内容垂直排列? 修改主轴的方向 主轴默认 ...

  10. Java学习笔记(三)java方法

    学习笔记3 Java方法 一.什么是方法 System.out.println() 是什么 System是一个类,out是一个对象,println()就是一个方法 意思是调用System中的out对象 ...