MySQL数据库优化(一)

106 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,点击查看活动详情

前言

上篇我们学习了MySQL中的索引设计。有兴趣的小伙伴可以阅读(MySQL学习-索引设计(二))。
下面我们继续学习MySQL中的数据库优化。

数据库的优化步骤

当遇到查询数据慢的情况,需要进行数据库调优,具体怎么优化呢?下面介绍一下调优排查问题的步骤:

  1. 首先观察服务器的状态是否存在周期性的波动。
    • 如果存在,可以通过加缓存更改缓存失效策略来解决,如果解决了,那我们的调优工作就结束了。如果没有解决,则继续进行第2步。
    • 如果不存在,则继续进行第二步。
  2. 存在不规则的延迟和卡顿现象。
  3. 开启慢查询
    1. 使用语句查看EXPLAIN SHOW PROFILING
      1. 如果是SQL等待时间长,则进行调优服务器参数,如果还没有解决问题,进行第四步
      2. 如果是SQL执行时间长,则进行如下调优
        • 索引设计优化
        • JOIN表过多,需要优化
        • 数据表设计优化
        • 调优后,如果还没有解决问题,则进行第四步
  4. SQL查询是否到达瓶颈。
    1. 如果否,则重新检查一遍。
    2. 如果是,则进行:
      • 读写分离(主从架构)
      • 分库分表(垂直分库,垂直分表,水平分表)

从优化效果上来看:硬件 > 系统配置 > 数据库表结构 > 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:删除操作的次数

今天先学习到这里,明天继续。