开发者学堂课程【MySQL 高级应用 - 索引和锁:SQL 性能下降的原因】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/598/detail/8588
SQL 性能下降的原因
内容介绍
一、SQL 性能下降的原因
二、总结
一、SQL 性能下降的原因
主要是性能下降 SQL 慢、执行时间长、等待时间长
不是一条 SQL 抓出来就要优化,在真实的生产环境下这种故障第一个要去复线,有可能去排查的时候没,所以没法复线。
可能需要它跑半天或者一天来缩小筛查的范围,不是故障一发生就能获得这条 SQL ,而且到底是不是真的情况到底是不是 SQL 写的慢,也可以是磁盘的空间满,这些情况也会导致 SQL 慢。
1.查询语句写的烂
Select 语句写的烂,各种链接各种子查询导致用不上索引或者没见索引。所以需要看索引后期优化的内容。
2.索引失效
索引失效的前提是见没用上,而没有索引是根本没见过。
索引分为单值索引和复合索引。
假如说有 id、name、email、weixinNumber
假如说select * form user where name=
’;
假设这个表是千万的记录,假设重名的也很少,要想按照这个name查的快就要在上边做一个索引。
单值索引:
select * from user where name='';
create index idx_user_name on user(name)
//id_建索引在 user 表的 name 字段上,没建索引的时候是杂乱无章的,现在是进行了排序所以查询的时候速度可以更快。
单值索引是只给这个表的某一个字段建一个索引
复合索引:
频繁使用的是字段要建立索引,并且同时可能使用两到三个字段
select * from user where name='' and email='’
;
create index idx_user_name on user(name)
Create index idx_user_nameemail on user(name,email)
3.查询关联太多 join(设计缺陷或不得已的需求)
join 太多不好就像 Java 的类一样继承层次太多也不好,但是有些时候是因为设计缺陷或不得已的需求。关联查询太多的 join 也会导致慢查询时间长。
4.服务器调优及各种参数设置(缓冲、线程数等)
如果这些设置不合理比例不恰当,也会导致查询时间长等待时间长。
二、总结
包含但不限于这四个还会有其它的主要是前三个是跟 Java 工程师相关的,着重的如何写好 SQL ,如何建好索引且导致索引不失效就是重点解决的任务。