慢SQL(面试题)

简介: 慢SQL(面试题)

慢SQL定义

慢SQL的话,一般超过1s就属于慢SQL,超过1秒的SQL,大部分都是连表比较多了,比如left join,right join,inner join这些,因为是多个表,所以树构建的都不一样,所以连表性能比较差。

排查慢SQL

这里有两种情况,一种是没锁定到慢SQL,一种是锁定到了慢SQL。


那如果没锁定到慢SQL的情况下,一般会先开启,慢日志,mysql可以支持配置的,这个慢日志可以,配置一个预值,这个预值一般就是1秒,也就是说,mysql里面会进行监听,如果超过了1秒,他就会把他的那个,日志打印下来,打印下来的是一个一个的SQL,然后就可以通过,explain关键字,来具体来看,这个SQL慢的原因。这个是没锁定到慢SQL的情况。


然后接着说,直接锁定到慢SQL的情况,锁定到SQL以后,用explain关键字看,SQL慢的原因,看他的那个type,看他的index,看他的rows,就是对应扫描多少行,对应命中的索引,来判断是索引失效呢,还是没加索引。


基本上来说,分为两种情况:


一个是Java代码本身,或者说是SQL的编写有问题,不规范,导致索引失效。就比如说:违背了最左原则,还有就是有索引,但是你没用,就比如说查询时候有一个name的字段,他加了一个唯一索引,但是查询时候,没用这个name,查询场景用不到,这种就是不行的,还有就是在那个,索引上进行隐式计算(比如说在索引上搞一个+=,这种会让索引失效),和in、not in(这个有可能不走索引,因为走索引查一页数据是16k,数据量少的话有可能不走索引)一般推荐用exist(一个z斯特)或者not exist来替代,大概就是这些。(in和exist的区别的话,我只记得exist是避免索引失效的)


另外一个就是索引,索引导致的慢查询的话,有可能是没索引,解决的话就加索引,用那个explain关键字查看执行计划。

还有一种情况是,有索引,但是没走索引,解决的花也是用explain关键字查看执行计划。

相关文章
|
1月前
|
SQL 数据库 C#
C# .NET面试系列十一:数据库SQL查询(附建表语句)
#### 第1题 用一条 SQL 语句 查询出每门课都大于80 分的学生姓名 建表语句: ```sql create table tableA ( name varchar(10), kecheng varchar(10), fenshu int(11) ) DEFAULT CHARSET = 'utf8'; ``` 插入数据 ```sql insert into tableA values ('张三', '语文', 81); insert into tableA values ('张三', '数学', 75); insert into tableA values ('李四',
60 2
C# .NET面试系列十一:数据库SQL查询(附建表语句)
|
2月前
|
SQL 存储 数据库
面试题19: 如何优化SQL查询?
面试题19: 如何优化SQL查询?
面试题19: 如何优化SQL查询?
|
1月前
|
存储 关系型数据库 MySQL
最全MySQL面试60题(含答案):存储引擎+数据库锁+索引+SQL优化等
最全MySQL面试60题(含答案):存储引擎+数据库锁+索引+SQL优化等
147 0
|
9天前
|
SQL 关系型数据库 MySQL
SQL常见面试题总结2
SQL常见面试题总结
|
15天前
|
SQL 关系型数据库 MySQL
MySQL SQL语句面试准备
MySQL SQL语句面试准备
9 0
|
2月前
|
SQL 关系型数据库 MySQL
|
3月前
|
SQL
面试必备杀技:SQL查询专项训练(二)
面试必备杀技:SQL查询专项训练
|
3月前
|
SQL
面试必备杀技:SQL查询专项训练(一)
面试必备杀技:SQL查询专项训练
|
3月前
|
SQL 数据库
面试题:Sql中的连接
面试题:Sql中的连接
28 5
|
3月前
|
SQL 数据挖掘 数据处理
「SQL面试题库」 No_123 The Most Recent Orders for Each Product
「SQL面试题库」 No_123 The Most Recent Orders for Each Product