MySQL 性能优化

MySQL数据库优化设计的知识点很广,这里我主要将其划分为Schema、sql、index,硬件四方面谈谈自己的理解。

Schema

字段设计:吝啬的原则,Not Null,三个预留备用字段。

表的设计合理化,首先不得不提到三范式

  1. 字段不可分
  2. 所有非主键字段依赖主键字段
  3. 所有非主键字段不依赖其他非主键字段
    三范式的目的时减少数据的冗余,但实际开发过程中为了提高查询效率等,适当保留冗余数据。

主从分离,垂直分区和水平分区。

sql

这里提一个生产遇到的问题,多表关联查询,包含多个join和子查询,这里我们可以将语句化繁为简,数据拼接等操作可以叫用程序语言本身来操作。
避免select *
limit offset,rows
充分利用表锁和行锁
慢查询日志,针对性优化

index

explain

type 含义
ALL 全表扫描
index 索引全扫描
range 索引范围扫描
ref 非唯一索引扫描
eq_ref 唯一索引扫描
const,system 单表最多有一个匹配行
Null 不用扫描

一般来说,得保证查询至少达到range级别,最好能达到ref
组合索引和前缀索引

硬件

加机器配置,固态等

原文地址:https://www.cnblogs.com/zenan/p/10895144.html