MySQL优化

优化分为六大部分:

  • SQL语句的优化
  • 索引的优化
  • 表结构的优化
  • 事务优化
  • 系统配置优化
  • 物理机的优化
  1. SQL语句的优化
    a. 尽量使用select 字段名,不要使用select *,select *不能使用索引覆盖。只查需要用到的列。
    b. 小表驱动大表。主查询 in/exists 子查询.
    ⅰ. in 先执行右边的子查询再执行主查询。in 适用于左边大表,右边小表。
    ⅱ. exists 先执行左边的主查询然后执行子查询。exists 适用于左边小表,右边大表
    ⅲ. 核心是先查小表,再查大表
    c. 使用 join 代替子查询,join不要连接过多的表
    d. insert update delete 数据时,批量进行操作。不要循环,一条条的插入
    e. 多用limit,减少不必要的查询和返回。
    f. 使用group by时,首先使用where 减小数据量,分组时效率会高
  2. 索引的优化
    a. explain 查看执行计划,看是否走索引。
    b. select \order by 字段使用索引
    c. 控制索引的数量,阿里规约:一个表5个索引,并且单个索引中的字段数不超过5个。因为insert update delete操作需要维护索引。
    d. 联合索引时,遵守最左匹配原则
    e. 不在索引列上进行计算、函数
  3. 表结构的优化
    a. 合理的表结构
    b. 适当冗余
    c. 尽量使用not null字段。null 字段会多使用一个字节来记录是否为null。
    d. 合理的字段类型。
    ⅰ. 尽量选择数字类型,因为数字的处理速度快于字符串的处理速度
    ⅱ. 尽可能使用小的类型,比如:用bit存布尔值,用tinyint存枚举值等
    ⅲ. 长度固定的字符串字段,用char类型
    ⅳ. 长度可变的字符串字段,用varchar类型
    ⅴ. 金额字段用decimal,避免精度丢失问题
  4. 事务优化
    a. 避免长事务
    b. 减少锁定的时间长度和资源数
  5. 系统配置优化
    a. 慢查询默认是关闭的,生产环境需要关闭,开发环境打开,会有一定的性能损耗。开启的命令 set global slow_query_log='ON';
    b. 调整redolog的size。这个size小了,会导致频繁的刷盘,效率会降低。InnoDB特有的。
  6. 物理机的优化
    a. 更大的内存、磁盘(高速读写)、网络带宽、CPU
posted @ 2024-02-07 16:40  永恒&  阅读(8)  评论(0编辑  收藏  举报