Mysql高性能优化笔记,帮你轻松拿下技术人必须搞定的MySQL

MySQL 进阶之王,MySql 性能实战源码 + 笔记 + 项目实战 随着互联网时代的兴起,MySQL 在数据库领域日益显现出举足轻重的地位,它不断扩大的用户群体就是很好的证明。在这样的背景下,需要越来越多的人在知识资源方面为之付出,将自己对 MySQL 数据库的学习过程、运维经验、个人理解等记录下来,为行业中的后来者燃起一盏明灯, 让他们少走一些弯路。由于互联网产品用户量大、高并发请求场景多,因此对 MySQL 的性能、可用性、扩展性都提出了很高的要求。使用 MySQL 解决大量数据以及高并发请求已经是程序员的必备技能,也是衡量一个程序员能力和薪资的标准之一。 阅读详情

前言

一、MYSQL 架构与历史

1.mysql架构简图

Mysql存储引擎将存储引起中的数据通过行缓存格式拷贝数据、服务层将拷贝内存解码成各个列。(数据库一个表不建议设计多个列)

2. mysql并发控制

2.1 锁策略

同一个数据并发修改需要锁的机制来保证数据的一致性,所以常见的并发控制是通过实现两种机制的锁来解决并发问题。分别是排它锁(也叫写锁)和共享锁(读锁),场景如下:

读读锁:这种场景下是不会出现阻塞的,因为读数据并不会影响数据,所以支持并发读数据。

写写锁:该场景需要进行阻塞。

读写锁(写读锁) :虽然有读请求,但是写请求会影响读取结果,也需要进行排他锁处理。

所以说一个写锁会阻塞其他的写锁和读锁。

2.2 锁粒度

在上面我们介绍了锁的实现策略,而提交系统并发还有一种方式是细化锁定的范围即锁粒度 。只有在保证数据安全的前提下使得锁定范围尽可能的小,从而使得并发程度更高。

MySQL有三种锁的级别:页级、表级、行级

MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking);

BDB存储引擎采用的是页面锁(page-level locking),但也支持表级锁;

InnoDB存储引擎既支持行级锁(row-level locking),也支持表级锁,但默认情况下是采用行级锁。

MySQL这种锁的特性可大致归纳如下:

表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。

行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。

锁的机制是由各个的存储引擎实现的

3. mysql 事务

3.1 mysql事务日志

在修改数据的时候,只需修改内存中的数据并将修改记录以顺序IO的形式写入事务日志中,待以后慢慢回写磁盘。

有了事务日志,则数据持久化到磁盘不需要进行实时随机IO的更新数据操作

二、服务性能剖析

1. 服务性能指标

**响应时间 : **服务器处理一次请求响应的耗时。

QPS:Query Per Second,每秒请求数。响应时间越短,QPS则越高。在单线程的情况下,是呈线性关系,多线程时,总QPS = (1000ms/ 响应时间)* 线程数。

吞吐量:单位时间内可处理的事务的数量,属于性能定义的倒数。

三、mysql优化

1. schema和数据类型的优化

schema在数据库中表示的是数据库对象集合,它包含了各种对像,比如:表,视图,存储过程,索引。mysql的schema等价于数据库对象(包含表、视图、存储过程、索引等等的集合)

最小数据长度: 能正确存储数据的最小数据类型,datetime和timesamp存储日期(精确到秒),但是后者只需要占据前者一半的存储空间。

简单的数据类型:整型要比字符串(字符串设计字符编码和排序)操作代价更低,varchar 比char类型操作代价更低。

避免NULL列:查询包含NULL的列会使得 索引、索引统计、值比较变的复杂,且可为null的类创建索引的时候会额外占据空间

整型类型:tinyint(8)、smallint(16)、mediumint(24)、int(32)、bigint(64)。unsinged 无符号会使得正数的上限提高一倍。sql中的整型计算一般都会使用64字节的bigint整数

实数类型:float/double 使用浮点类型进行计算(会有误差)。decimal 为精确类型计算,其有一定的空间和计算开销,所以一些财务数据可以使用bigint(乘以相应的倍数存储)。

字符类型:不同引擎存储格式不同。

varchar 可变字符长度(需要一个额外字段记录长度)

char定长长度

varchar相对于char节省了存储空间,但更新操作来说char不容易产生碎片。(由于行长度可变对于更新操作,页内没有更多的空间可能需要通过拆分数据进行存储(MyIsam会将行拆分成不同的片段存储,InnoDB则需要分裂页来存储数据))。

blob:二进制形式存储大的字符类型数据 tinyblob、smallblob、blob、mediumblob、bingblob

text:字符串形式存储大的字符类型数据 tinytext、smatext、text、mediumtext、bigtext

mysql将blob和text当做独立对象,如果其只太大时 页内只存储指针,指向外部存储的实际区域 尽量避免这两种数据类型

enum类型:枚举可以将字符串存储到预定义集合中,占用很少的空间。

日期时间类型:DateTime类型和TIMESTAMP类型,推荐使用TIMESTAMP因为其空间效率高。

位数据类型:mysql5.0之前BIT和tinyInt是一样的。mysql5.0之后是使用一个或多个bit(位)存储0/1,MySql将bit当做字符串类型进行处理。

2. mysql设计的范式

第一范式1NF: 数据库中的每个字段不可再分。

**第二范式2NF: **有主键,非主键字段依赖主键。

第三范式3NF: 数据库表中不包含已在其他表中已包含的非主键字段。

反范式:通过一定的数据字段冗余避免表关联。

3. 缓存汇总相关

对于缓存汇总相关统计数据来说 有如下设计方式

1\. 使用视图 增加读性能
2\. 技术器相关 可以使用多条记录存储计数,最终使用sum汇总(解决多个地方同时修改一行记录 造成的全局互斥锁)

4. alter table

​ mysql的alter table 操作对大表的性能损耗很大,与其需要表结构的原理有关:mysql在执行代大部分修改表结果的方式是创建一个新表,从旧表查询数据并插入新表(重构缓存)再删除旧表,同时alter 操作会终端mysql服务。

​ alter table使用技巧:

1\. 在不提供服务的mysql节点进行alter table操作 然后进行主从切换。
2. 使用**影子拷贝**。
3. alter table 表名 alter column xxx 操作改变表结构 会直接修改.frm文件而不涉及表数据。(<font color="red">是仅仅限于修改列的默认值 还是所有操作</font>)

mysql知识点(补充)

1. 查看表的相关信息

SHOW TABLE STATUS LIKE 'table_name'
(Name, Engine, Version, Row_format, Rows, Avg_row_length, Data_length, Max_data_length, Index_length, Data_free, Auto_increment, Create_time, Update_time, Check_time, Collation, Checksum, Create_options, Comment)

最后

Mysql笔记已整理成PDF文档,共有578页

mysql面试题49:MySQL中不同text数据类型的最大长度 以下是MySQL中不同TEXT类型的最大长度: 1. TINYTEXT:最大长度为255个字符(2^8-1)。 2. TEXT:最大长度为65,535个字符(2^16-1)。 3. MEDIUMTEXT:最大长度为16,777,215个字符(2^24-1)。 4. LONGTEXT:最大长度为4,294,967,295个字符(2^32-1)。 阅读详情

相关推荐

MySQL在高性能计算环境下的10大优化秘籍!挑战与对策全揭

🔥关注墨瑾轩,带你探索编程的奥秘!🚀🔥超萌技术攻略,轻松晋级编程高手🚀🔥技术宝库已备好,就等你来挖掘🚀🔥订阅墨瑾轩,智趣学习不孤单🚀🔥即刻启航,编程之旅更有趣🚀想象一下,当你的数据库需要处理海量数据和复杂查询时,如何才能让它像飞一样快?这就是高性能计算环境下MySQL优化的魅力所在。今天,我们就来详细解析如何让MySQL在高性能计算环境中游刃有余。准备好了吗?我们开始吧!

java专栏 759

数据库(4)——MySQL数据类型及字段约束

这里将自己学习数据库的一些笔记、积累分享一下,如果涉及到了文章、文字侵权,请联系我删除或调整。 一、MySQL数据类型及字段约束 1.1 数值类型 MySQL中支持多种整型,其实很大程度上是相同的,只是存储值的大小范围不同而已。 tinyint:占用1个字节,相对于java中的byte smallint:占用2个字节,相对于java中的short int:占用4个字节,相对于java中的int bigint:占用8个字节,相对于java中的long ​​

AlieNeny的博客 1071

【MYSQL学习】10分钟掌握MySQL数据查询-WHERE子句,新手也能轻松上手

在深入操作之前,我们先来简单了解一下MySQL。MySQL是一个开源的关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。它以其高性能、可靠性和易用性而闻名,广泛应用于各种规模的应用程序中。无论你是想搭建个人博客,还是开发企业级应用,MySQL都能为你提供强大的数据支持。WHEREWHERE子句用于在SELECTUPDATE和DELETE语句中指定条件,从而筛选出满足特定条件的记录。WHERE通过以上详细介绍,相信你已经对MySQL中的WHERE子句有了全面的了解。

java专栏 2397

高性能mysql学习笔记一

本片博文是笔者学习《高性能mysql》一书的第一篇学习笔记,对应书籍章节为 一、三、四章节,也是笔者《mysq》l学习专栏的的第一篇博文。主要针对mysql的服务架构、并非控制、mysql事务、服务性能、mysql优化等进行了学习和记录,希望读者可以通过这篇博文对学习mysql有所收获。也欢迎大家订阅笔者《mysql》专栏,不定时更新mysql的知识。

liushangzaibeijing的博客 3万+

零基础玩转华为AP 4050DN-HD:FAT模式家庭无线网络配置实战

本文为零基础用户提供华为AP 4050DN-HD从FIT模式转换为FAT模式的完整实战教程。详细介绍了固件升级、模式转换以及配置家庭无线网络(包括路由、DHCP、Wi-Fi和NAT)的每一步操作,帮助用户将企业级瘦AP改造为高性能家庭胖AP,打造稳定可靠的家庭网络环境。

weixin_29196613的博客 630

jetson nano网络配置(有线、无线、USB)

注意:本节内容使用Jetson nano B01 版本或Jetson nano ALT 版本安装方式相同,在安装无线网卡等设备时,由于线材和设备比较脆弱,需要轻拿轻放,接口连接不上时,需要重新对准接口在进行连接,不要强行连接。Jetson nano 需要连接网络来进行更多的操作,本节就来讲解Jetson nano 的三种网络连接方法。有线:我们可以使用网线连接Jetson nano 的RJ45 接口,实现联网。

m0_73841621的博客 1万+

mysql text 主键_MySQL自增主键与TEXT数据类型的正确用法

此文章主要向大家描述的是MySQL自增主键与TEXT数据类型的正确使用方案, 有时我们会用到MySQL数据库,并且还要用到起自增主键与TEXT数据类型。为了防止忘记,先记录下TEXT数据类型长度:TINYTEXT:256bytesTEXT:65,535bytes=>~64kbMEDIUMTEXT:16,777,215bytes=>~16MBBIGTEXT:4,294,967,...

weixin_33188115的博客 848

GT-suite v2016的下载和安装

1 写在前面 GT-suite 是一款用来做内燃机仿真的软件。在安装过程中遇到很多问题,网上的安装教程也大都抄来抄去,试着安装了几遍都没有成功。最终在贴吧一个老哥的帖子里找到了解决办法,但是老哥的帖子也不是很详细,所以做了这个详细版本的教程。 GT-suite v2016安装包: 链接:https://pan.baidu.com/s/1JZPgJ8_-J-L8rV84-eHedQ 提取码:uj...

kisssshot的博客 3万+

Mysql中的常用类型 说明

http://hi.baidu.com/%BC%D6%D3%F0%CE%F5/blog/item/5986cdf785cdd72f730eec36.html 一、数字类型 类型 范围 说明  Char(N) [ binary] N=1~255 个字元  binary :分辨大小写 固定长度 std

caixiexin的专栏 995

GD32F103实战:用ADC+DMA实现高精度多通道电压采集与OLED实时显示(附完整工程)

本文详细介绍了如何利用GD32F103的ADC+DMA技术实现高精度多通道电压采集,并通过OLED实时显示数据。文章包含硬件架构设计、ADC配置技巧、DMA传输优化及显示系统实现方案,提供完整工程代码和调试指南,适用于工业传感器和环境监测设备开发。

weixin_42567497的博客 400

Win11安装Office2021

windows11安装office2021。

1万+

跳槽拿下50w的offer,靠的是腾讯团队分享的MySQL优化王者晋级之路

随着互联网时代的兴起,MySQL在数据库领域日益显现出举足轻重的地位,它不断扩大的用户群体就是很好的证明。在这样的背景下,需要越来越多的人在知识资源方面为之付出,将自己对MySQL数据库的学习过程、运维经验、个人理解等记录下来,为行业中的后来者燃起一盏明灯, 让他们少走一些弯路。 掌握并熟练使用MySQL的几点建议: 建立完成的 MySQL 知识体系 发挥MySQL的最佳性能的优化方法 掌握如何处理海量业务数据和高并发请求 能够轻松掌握那些晦涩难懂的知识,如主从复制、读写分离、事务与锁等。 能够

Java0258的博客 147

RYU+mininet——RYU

1. 使用RYU做mininet的控制器 1.1 RYU介绍与安装 RYU是一款基于python的控制器,你可用Ryu实现各种想要实现的网络功能,它可以下发或接收流表进行各种路由运算。 建议使用高版本的Ubuntu系统安装ryu,否则会有各种错误,安装过程比较简单,如下: apt install gcc libffi-dev libssl-dev libxml2-dev libxslt1-...

qq_34415266的博客 1万+

高性能MySQL.pdf资源介绍:掌握MySQL性能优化的全面指南

高性能MySQL.pdf资源介绍:掌握MySQL性能优化的全面指南 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在现代Web应用和大数据环境中,数据库性能优化是提升整体系统性能的关键环节。高性能MySQL.pdf资源提供了一本详尽的MySQL性能优化电子书,适用于数据库管理员、开发者和对MySQL有深厚兴趣的技术人员。该书以高清PDF格式呈现,结构清晰,目录详尽,便...

gitblog_06729的博客 954

51单片机嵌入式开发:14、STC89C52RC 之HX1838红外解码NEC+数码管+串口打印+LED显示

对于C51单片机的设计思路,你可以使用类似的步骤来实现红外解码、数码管显示和LED显示的功能。下面是一个简单的设计思路:(1) 连接HX1838红外解码器、数码管和LED到C51单片机。将HX1838的信号引脚连接到C51单片机的外部中断引脚(例如INT0),数码管的CLK引脚连接到C51单片机的某个IO口引脚,数码管的DIO引脚连接到C51单片机的另一个IO口引脚,LED连接到C51单片机的某个IO口引脚。(2) 在C51的程序中,定义并初始化所需的IO口和外部中断。

sinat_30943509的博客 2977

【ArcGIS Pro微课1000例】0022:基于DEM进行流域分析生成流域图

填洼Fill,在进行水文分析后续操作前,首先要对DEM进行填洼,创建无凹陷点的DEM。在ArcGIS中使用的是八方向流量建模(D8算法),工具位于水文分析下的【流向】。填洼需要使用水文分析工具下的【填洼】。确定输入与输出即可。

智慧空间实验室 2752

硬核分享,靠这套MySQL笔记轻松过了阿里二面,基础架构调优齐全了

我们总是喜欢瞻仰大厂的大神们,但实际上大神也不过凡人,与菜鸟程序员相比,也就多花了几分心思,如果你再不努力,差距也只会越来越大。实际上,作为程序员,丰富自己的知识储备,提升自己的知识深度和广度是很有必要的。

2401_84048225的博客 725

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

AI如何帮你轻松实现MySQL字符串分割?

通过这次实践,我发现AI辅助开发特别适合这类有明确输入输出的数据处理任务。它不仅能快速生成可用的代码,还能提供多种实现思路供选择。对于MySQL函数开发这类工作,使用AI工具至少能节省70%的编码时间。如果你也经常需要处理字符串分割这类需求,不妨试试InsCode(快马)平台的AI辅助功能。无需安装任何软件,打开浏览器就能开始编写和测试MySQL代码,整个过程流畅又高效。

AgatePanther34的博客 795

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

轻松上手MYSQL:MYSQL初识(下)

MYSQL作为最流行的开源SQL数据库管理系统,凭借其快速、可靠、可扩展和易用性赢得了广大用户的青睐。无论是台式机、笔记本电脑还是大型服务器集群,MYSQL都能提供高效的数据库服务。其开源与灵活性使得MYSQL拥有广泛的社区支持和丰富的功能扩展。MYSQL数据库服务器具有出色的性能和安全性,能够处理大量数据,并保证数据的一致性和完整性。同时,MYSQL还提供了丰富的API和编程接口,支持多种后端和客户端程序,为用户提供了丰富的选择。

haiwen优快云的博客 1839

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

高性能Mysql笔记-4查询性能优化

高性能Mysql笔记-4查询性能优化

qq_58141314的博客 353

反杀套路 阿里独家的MySQL优化王者晋级之路,跟弯路说再见

随着互联网时代的兴起,MySQL在数据库领域日益显现出举足轻重的地位,它不断扩大的用户群体就是很好的证明。在这样的背景下,需要越来越多的人在知识资源方面为之付出,将自己对MySQL数据库的学习过程、运维经验、个人理解等记录下来,为行业中的后来者燃起一盏明灯, 让他们少走一些弯路。由于互联网产品用户量大、高并发请求场景多,因此对MySQL的性能、可用性、扩展性都提出了很高的要求。使用MySQL解决大量数据以及高并发请求已经是程序员的必备技能,也是衡量一个程序员能力和薪资的标准之一。

the shy 176

《高性能MYSQL》-- 查询性能优化

查询性能优化深刻地理解MySQL如何真正地执行查询,并明白高效和低效的原因何在。

Dennis_nafla的博客 1321

阿里独家的MySQL优化王者晋级之路,跟弯路说再见

随着互联网时代的兴起,MySQL在数据库领域日益显现出举足轻重的地位,它不断扩大的用户群体就是很好的证明。在这样的背景下,需要越来越多的人在知识资源方面为之付出,将自己对MySQL数据库的学习过程、运维经验、个人理解等记录下来,为行业中的后来者燃起一盏明灯, 让他们少走一些弯路。 掌握并熟练使用MySQL的几点建议: 建立完成的 MySQL 知识体系 发挥MySQL的最佳性能的优化方法 掌握如何处理海量业务数据和高并发请求 能够轻松掌握那些晦涩难懂的知识,如主从复制、读写分离、事务与锁等。 能够

yuandengta的博客 251

轻松搞定MySQL安装,让数据库开发更高效

最新接入DeepSeek-V3模型,点击下载最新版本InsCode AI IDE 轻松搞定MySQL安装,让数据库开发更高效 在当今数字化时代,数据库作为信息存储和管理的核心工具,已经成为每一位开发者不可或缺的技能之一。而MySQL作为最流行的开源关系型数据库管理系统之一,凭借其高性能、高可靠性和易用性,成为众多开发者首选的数据库解决方案。然而,对于初学者来说,MySQL的安装和配置过程可能会显得...

TopazHawk54的博客 1045

跟套路说再见!阿里巴巴独家MySQL优化王者晋级之路,让你高薪摸鱼,不再秃头

随着互联网时代的兴起,MySQL在数据库领域日益显现出举足轻重的地位,它不断扩大的用户群体就是很好的证明。在这样的背景下,需要越来越多的人在知识资源方面为之付出,将自己对MySQL数据库的学习过程、运维经验、个人理解等记录下来,为行业中的后来者燃起一盏明灯, 让他们少走一些弯路。 掌握并熟练使用MySQL的几点建议: 建立完成的 MySQL 知识体系 发挥MySQL的最佳性能的优化方法 掌握如何处理海量业务数据和高并发请求 能够轻松掌握那些晦涩难懂的知识,如主从复制、读写分离、事务与锁等。 能够

m0_50180963的博客 191
上一篇: 疑似大厂泄露!阿里内部Redis教程笔记,细节点满/效率翻倍
下一篇: 世界级架构师整理的《图解面向对象编程》,通俗易懂且博大精深
Java技术那些事儿
博客等级 码龄5年 2306粉丝 2584原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值