MySQL数据库优化看这一篇就够了

2023年 10月 13日 25.4k 0

当面试官让你聊聊MySQL数据库性能优化,你还是只能回答优化sql,建索引吗?让我们看看还可以从哪些方面聊聊吧。其实你还可以从网速、数据量、数据库日志、内存等问题、硬件配置,当前占用资源、硬盘碎片或索引碎片等等诸多方面分析聊聊。

一、MySQL 主备切换以及读写分离

首先你要知道MySQL 主备切换以及读写分离是大方向上的数据库性能优化的重要手段。是架构层面的优化垂直拆分、水平拆分。

顺便提一下数据表设计的规范程度称之为范式。三大范式

  • 1NF:列不能再拆分

  • 2NF:所有的属性都依赖于主键

  • 3NF:所有的属性都直接依赖于主键(消除传递依赖)

更多内容可参看:MySQL读写分离架构MySQL 主备切换:主备一致、主备延迟、一主多从

二、SQL优化

这里提及的SQL优化内容包括sql语句的优化、慢查询日志、EXPLAIN 执行计划分析等。

1、如何定位低效率的SQL语句-慢查询日志?EXPLAIN 执行计划怎么分析?

查看博主另一篇文章详解:MySQL慢查询是怎么回事

2、sql语句优化常用的方法有哪些?

查看博主另一篇文章详解:sql优化常用的方法

3、如何优化索引?优化CRUD操作?优化分页?

查看博主另一篇文章详解:MySQL索引及索引优化、索引失效

通过慢日志查询可以知道哪些SQL语句执行效率低下,通过explain我们可以得知SQL语句的具体执行情况,索引使用等,还可以结合show命令查看执行状态。

4、通过show profiles和show profile for query查看执行状态

MySQL从5.0.37开始支持剖面系统来帮助用户了解SQL执行性能的细节,一般用于会话级,用于收集SQL语句的资源使用情况。

1)可以通过下面的方式来查看MySQL是否支持和开启了剖面系统:

select @@have_profiling;–YES支持
select @@profiling;–1开启

2)如果没有开启剖面系统,可以通过下面的SQL来打开它。

set profiling=1;

3)接下来就可以通过剖面系统来了解SQL的执行性能,例如:

select count(*) from test;–执行SQL语句
show profiles;–通过show profiles查看开启了profiling后的所有sql语句的id和消耗的时间
show profile for query 1;-- 注:此处的1为上一步查询结果显示的query_id值。
show profile cpu,source for query 1;–查看SQL语句的CPU及资源情况


三、配置优化

1、show variables查看MySQL服务器配置参数
2、show status查看MySQL服务器运行状态值
具体可以查看和调整哪些参数配置呢?传送门:

设置要根据自己的实际情况来设置,如果设置的值不在合理的范围内,并不是设置越大越好,可能设置的数值太大体现不出优化效果,反而造成系统的swap空间被占用,导致操作系统变慢,降低sql查询性能。

MySQL5.7及以后版本,改参数是动态的,修改后,无需重启MySQL,但是低版本,静态的,修改后,需要重启MySQL。

四、碎片整理优化

传送门:数据库优化之常用的show table status及ALTER TABLE 重建表

当面试官让你聊聊MySQL数据库性能优化,你还是只能回答优化sql,建索引吗?让我们看看还可以从哪些方面聊聊吧。其实你还可以从网速、数据量、数据库日志、内存等问题、硬件配置,当前占用资源、硬盘碎片或索引碎片等等诸多方面分析聊聊。

一、MySQL 主备切换以及读写分离

首先你要知道MySQL 主备切换以及读写分离是大方向上的数据库性能优化的重要手段。是架构层面的优化垂直拆分、水平拆分。

顺便提一下数据表设计的规范程度称之为范式。三大范式

  • 1NF:列不能再拆分

  • 2NF:所有的属性都依赖于主键

  • 3NF:所有的属性都直接依赖于主键(消除传递依赖)

更多内容可参看:MySQL读写分离架构MySQL 主备切换:主备一致、主备延迟、一主多从

二、SQL优化

这里提及的SQL优化内容包括sql语句的优化、慢查询日志、EXPLAIN 执行计划分析等。

1、如何定位低效率的SQL语句-慢查询日志?EXPLAIN 执行计划怎么分析?

查看博主另一篇文章详解:MySQL慢查询是怎么回事

2、sql语句优化常用的方法有哪些?

查看博主另一篇文章详解:sql优化常用的方法

3、如何优化索引?优化CRUD操作?优化分页?

查看博主另一篇文章详解:MySQL索引及索引优化、索引失效

通过慢日志查询可以知道哪些SQL语句执行效率低下,通过explain我们可以得知SQL语句的具体执行情况,索引使用等,还可以结合show命令查看执行状态。

4、通过show profiles和show profile for query查看执行状态

MySQL从5.0.37开始支持剖面系统来帮助用户了解SQL执行性能的细节,一般用于会话级,用于收集SQL语句的资源使用情况。

1)可以通过下面的方式来查看MySQL是否支持和开启了剖面系统:

select @@have_profiling;–YES支持
select @@profiling;–1开启

2)如果没有开启剖面系统,可以通过下面的SQL来打开它。

set profiling=1;

3)接下来就可以通过剖面系统来了解SQL的执行性能,例如:

select count(*) from test;–执行SQL语句
show profiles;–通过show profiles查看开启了profiling后的所有sql语句的id和消耗的时间
show profile for query 1;-- 注:此处的1为上一步查询结果显示的query_id值。
show profile cpu,source for query 1;–查看SQL语句的CPU及资源情况

MySQL数据库优化看这一篇就够了-1
MySQL数据库优化看这一篇就够了-2

MySQL数据库优化看这一篇就够了-3

三、配置优化

1、show variables查看MySQL服务器配置参数
2、show status查看MySQL服务器运行状态值
具体可以查看和调整哪些参数配置呢?传送门:

设置要根据自己的实际情况来设置,如果设置的值不在合理的范围内,并不是设置越大越好,可能设置的数值太大体现不出优化效果,反而造成系统的swap空间被占用,导致操作系统变慢,降低sql查询性能。

MySQL5.7及以后版本,改参数是动态的,修改后,无需重启MySQL,但是低版本,静态的,修改后,需要重启MySQL。

四、碎片整理优化

传送门:数据库优化之常用的show table status及ALTER TABLE 重建表MySQL数据库优化看这一篇就够了-4

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论