开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,点击查看活动详情
前言
上篇我们学习了MySQL中的索引设计。有兴趣的小伙伴可以阅读(MySQL学习-索引设计(二))。
下面我们继续学习MySQL中的数据库优化。
数据库的优化步骤
当遇到查询数据慢的情况,需要进行数据库调优,具体怎么优化呢?下面介绍一下调优排查问题的步骤:
- 首先观察服务器的状态是否存在周期性的波动。
- 如果存在,可以通过加缓存更改缓存失效策略来解决,如果解决了,那我们的调优工作就结束了。如果没有解决,则继续进行第2步。
- 如果不存在,则继续进行第二步。
- 存在不规则的延迟和卡顿现象。
- 开启慢查询
- 使用语句查看EXPLAIN SHOW PROFILING
- 如果是SQL等待时间长,则进行调优服务器参数,如果还没有解决问题,进行第四步
- 如果是SQL执行时间长,则进行如下调优
- 索引设计优化
- JOIN表过多,需要优化
- 数据表设计优化
- 调优后,如果还没有解决问题,则进行第四步
- 使用语句查看EXPLAIN SHOW PROFILING
- SQL查询是否到达瓶颈。
- 如果否,则重新检查一遍。
- 如果是,则进行:
- 读写分离(主从架构)
- 分库分表(垂直分库,垂直分表,水平分表)
从优化效果上来看:硬件 > 系统配置 > 数据库表结构 > SQL及索引。
从成本上来看:SQL及索引 > 数据库表结构 > 系统配置 > 硬件。
查看系统性能参数
在MySQL中,可以使用SHOW STATUS语句查询一些MySQL数据库服务器的性能参数,执行效率。语法如下:
SHOW [GLOBAL|SESSION] STATUS LIKE '参数';
常用参数如下:
- Connections:连接MySQL服务器的次数
- Uptime:MySQL服务器的上线时间
- Slow_queries:慢查询的次数
- Innodb_rows_read:Select查询返回的行数
- Innodb_rows_inserted:执行INSERT操作插入的行数
- Innodb_rows_updated:执行UPDATE操作更新的行数
- Innodb_rows_deleted:执行DELETE操作删除的行数
- Com_select:查询操作的次数
- Com_insert:插入操作的次数,对于批量插入的INSERT操作,只累加一次
- Com_update:更新操作的次数
- Com_delete:删除操作的次数
今天先学习到这里,明天继续。