前言
我们先看看执行一条查询SQL时Mysql的处理过程:
SQL优化我们可以从索引知识、缓存、执行计划、分库分表几方面去分析。
索引
MySql Innodb和Myisam对比及索引原理
MySQL 索引优化分析
MySQL 索引种类
缓存
这里我们可以使用 mybatis 一二级缓存、Redis缓存等。
执行计划 explain
EXPLAIN 执行计划中常见的值:
- type-all:全表扫描;
- type-range:范围查询;
- type-ref:代表索引命中多行数据,再将这些行回表查询优化策略;
- Extra-Using index condition:通过索引筛选,再回表提取数据;
- Extra-MRR:优化回表操作;
- Extra-Using where;代表直接扫描数据行进行筛选;
- Extra-Using filesort:代表使用文件排序,超低效率;
EXPLAIN 的 Extra 字段中,MRR 值作用:
MRR(Multi Range Read) 能很大程度提升性能。Select * 是要回表的,MRR 优势就在于优化了回表操作。查询通过二级索引检索到主键值,然后通过主键值回表。如果以二级索引的顺序回表,对应的主键就是乱序的,回表时候就是大量的随机 IO。
MRR 则在内存中将命中的二级索引进行了重新排序(以主键列排序),通过主键列回表则是顺序 IO,极大的提高了性能;
分库分表
数据量大时考虑使用分库分表,数据库读写分离
分库分表相关概念
MySQL主从同步原理和主从延迟问题分析
评论区