当面试官让你聊聊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及资源情况
三、配置优化
1、show variables查看MySQL服务器配置参数
2、show status查看MySQL服务器运行状态值
具体可以查看和调整哪些参数配置呢?传送门:
设置要根据自己的实际情况来设置,如果设置的值不在合理的范围内,并不是设置越大越好,可能设置的数值太大体现不出优化效果,反而造成系统的swap空间被占用,导致操作系统变慢,降低sql查询性能。
MySQL5.7及以后版本,改参数是动态的,修改后,无需重启MySQL,但是低版本,静态的,修改后,需要重启MySQL。
四、碎片整理优化
传送门:数据库优化之常用的show table status及ALTER TABLE 重建表