【MySQL】如何优化慢SQL

1、druid 是阿里巴巴开源的为监控而生的数据库连接池

我们开发项目的时候尽可能的提前发现问题,增加数据库监控是一个很好的方法。

感兴趣的可以查看https://github.com/alibaba/druid

2、MySQL慢日志监控

show variables like "%query%";
slow_query_log_file    慢日志地址
slow_query_log          慢日志监控是否开启
long_query_time        超过多少为慢日志 默认10秒,可以改为0.1秒

set long_query_time = 0.1 修改慢日志时间
set GLOBAL slow_query_log = NO 开启慢日志监控

MySQL的变量分为以下两种:
1)系统变量:配置MySQL服务器的运行环境,可以用show variables查看
2)状态变量:监控MySQL服务器的运行状态,可以用show status查看

[MySQL] 变量(参数)的查看和设置

3、查看执行计划

EXPLAIN SELECT * FROM TEST

MySQL Explain详解

4、最左匹配原则

①、KEY test_col1_col2_col3 on test(col1,col2,col3)
联合索引 test_col1_col2_col3 实际建立了(col1)、(col1,col2)、(col,col2,col3)三个索引。
SELECT * FROM test WHERE col1=“1” AND clo2=“2” AND clo4=“4”
上面这个查询语句执行时会依照最左前缀匹配原则,检索时会使用索引(col1,col2)进行数据匹配。
②、联合索引,根据索引匹配是任意顺序

对于联合索引(col1,col2,col3),查询语句SELECT * FROM test WHERE col2=2;是否能够触发索引?
大多数人都会说NO,实际上却是YES。
前提是表中只有这三列
index:这种类型表示mysql会对整个该索引进行扫描。要想用到这种类型的索引,对这个索引并无特别要求,只要是索引,或者某个联合索引的一部分,mysql都可能会采用index类型的方式扫描。但是呢,缺点是效率不高,mysql会从索引中的第一个数据一个个的查找到最后一个数据,直到找到符合判断条件的某个索引。所以,上述语句会触发索引。
ref:这种类型表示mysql会根据特定的算法快速查找到某个符合条件的索引,而不是会对索引中每一个数据都进行一一的扫描判断,也就是所谓你平常理解的使用索引查询会更快的取出数据。而要想实现这种查找,索引却是有要求的,要实现这种能快速查找的算法,索引就要满足特定的数据结构。简单说,也就是索引字段的数据必须是有序的,才能实现这种类型的查找,才能利用到索引。

Mysql联合索引最左匹配原则
 

5、索引覆盖

MySQL 覆盖索引

 

按照上面的慢慢看下来是肯定能解决慢SQL问题的,加油,记录一下,学习历程

 

 

相关推荐
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页