关注

Mysql性能调优


前言

提示:这里可以添加本文要记录的大概内容:


提示:以下是本篇文章正文内容,下面案例可供参考

一、查询性能优化

如何设计最优的库表结构
如何建立最好的索引
合理的设计查询

二、慢查询

查询花费大量时间的日志,是指mysql记录所有执行超过long_query_time参数设定的时间阈值的SQL语句的日志。
查询慢日志开关:
show VARIABLES like 'slow_query_log';
打开慢日志开关:
set GLOBAL slow_query_log=1;
查询慢日志超时时间阀值:
show VARIABLES like '%long_query_time%';

l slow_query_log 启动停止慢查询日志

l slow_query_log_file 指定慢查询日志得存储路径及文件(默认和数据文件放一起)

l long_query_time 指定记录慢查询日志SQL执行时间得伐值(单位:秒,默认10秒)

l log_queries_not_using_indexes 是否记录未使用索引的SQL

l log_output 日志存放的地方可以是[TABLE][FILE][FILE,TABLE]

三、Explain执行计划

Mysql分析查询Sql的性能情况
type:执行查询时的访问方法
出现比较多的是system>const>eq_ref>ref>range>index>ALL
一般来说,得保证查询至少达到range级别,最好能达到ref。

system:系统级,最快的 “捡现成”,表只有 1 条记录,且存储引擎(如 MyISAM)能精准确认这条记录的存在。(InnoDB不支持) 表记录只有一条且为Myisam
const:常量级,“按唯一门牌号找”,通过主键或唯一二级索引(且索引列不能是 NULL)和固定值等值匹配(比如id=100),只找 1 条记录。 单表找一条
eq_ref:连接查询专用的 “精准找”,连接查询中,被驱动表通过主键 / 唯一二级索引(联合索引要全匹配)和驱动表的值等值匹配。 连接查询的被驱动表找一条
ref:“按普通标签找”,通过普通二级索引(非唯一)和固定值等值匹配,可能找到多条记录。 等值找多条
range:“按范围找”,用索引找某个范围的记录,where 里有between、>、<、in、like(带%但不是开头)等。 范围找多条
index:“扫全部索引,不扫表”,查询的字段都在索引里(索引覆盖),但需要扫描全部索引记录,不用回表查数据。 扫全部索引
ALL:全表扫描,最慢的 “兜底方案”,不走任何索引,遍历全表的每一行记录来匹配条件。 全表扫描

区分:
const/eq_ref:都是 “找 1 条”,但 const 是单表查,eq_ref 是连接查询的被驱动表查;
ref/range:ref 是 “等值找多条”,range 是 “范围找多条”;
index/ALL:index 是 “扫全部索引”,ALL 是 “扫全部表数据”,都慢但 index 比 ALL 好一点。

四、查询优化器

在这里插入图片描述

五、高性能的索引使用策略

1.不在索引列上做任何操作

2.尽量全值匹配

建立联合索引后,如果我们的搜索条件种的列和索引列一致的话,就称为全值匹配。

3.最佳左前缀法则

建立联合索引后,如果不满足全值匹配,请遵循最佳左前缀法则,否则无法使用B+树。

4.范围条件放最后

联合索引的核心是最左匹配 + 有序性:只有前面的列 “精准锁定”,后面的列才保持有序,才能用索引;

5.覆盖索引尽量用

6.不等于要慎用

无法使用索引会导致全表扫描

7.Null/NotNull有影响

8.LIke查询要当心

普通like ‘%abc’ 永远无法利用索引快速定位,因为索引是按前缀排序的。
如果使用覆盖索引可以改善,避免回表,将全表扫描降级为全索引扫描,性能有所提升,但本质上还是扫描了大量数据。
优化:尽量避免这种前导通配符查询。如果业务必须,可以考虑使用全文检索(如 Elasticsearch)或反向索引,或者尝试把查询改成 like ‘abc%’(如果能改需求的话)。
在这里插入图片描述

9.字符类型加引号

字符串不加单引号索引失效,是因为Mysql查询优化器,会将字段转换为数字跟6比较,自然就会索引失效。

10.使用or关键字注意

or 是性能杀手,能不用尽量不用。如果要用,尽量保证所有条件列都有索引,或者考虑拆成 UNION。

11.使用索引扫描来做排序和分组

12.排序

ASC、DESC别混用

13.尽可能按主键顺序插入行

最简单的方法是使用AUTO_INCREMENT自增列
UUID导致页分裂,IO消耗过大

14.优化Count查询

15.优化limit分页


总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了Mysql性能调优的使用,欢迎评论区一起交流。

转载自CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/Javadl2025/article/details/158318571

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--