侧边栏壁纸
博主头像
再见理想博主等级

只争朝夕,不负韶华

  • 累计撰写 112 篇文章
  • 累计创建 64 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

MySQL-SQL如何优化

再见理想
2022-05-26 / 0 评论 / 0 点赞 / 346 阅读 / 456 字

前言

我们先看看执行一条查询SQL时Mysql的处理过程:

SQL优化我们可以从索引知识、缓存、执行计划、分库分表几方面去分析。

索引

MySql Innodb和Myisam对比及索引原理
MySQL 索引优化分析
MySQL 索引种类

缓存

这里我们可以使用 mybatis 一二级缓存、Redis缓存等。

Mybatis一级缓存和二级缓存

执行计划 explain

MySQL 之 EXPLAIN SQL 语句分析

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主从同步原理和主从延迟问题分析

END

0

评论区