SQL查询瓶颈
- CPU(SQL中对大量数据进行比较、关联、排序、分组,最大的压力在于比较)
- IO(服务器内存不能满足缓存数据,需要进行多次物理IO)
- 锁(不适宜锁的设置导致线程阻塞,尤其是线程交叉查询,导致死锁)
- 服务器自身性能(top,free, iostat和vmstat来查看系统的性能状态)
Explain
使用Explain关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。分析查询语句或是表结构的性能瓶颈。简单来说就是查看我们的SQL执行计划
主要作用有:
- 表的顺序读取
- 哪些索引可以使用
- 数据读取操作的操作类型
- 哪些索引被实际使用
- 表之间的引用
- 每张表有多少行被优化器查询
执行器主要包含的信息:
说明 | ||
id | select查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序 | 1、id相同,从上往下执行 2、id不同,子查询的id值+1,id值越大优先级越高越先被执行 |
select_type | 查询的类型,主要区别普通查询,联合查询,子查询等复杂查询 | 1、SIMPLE ,简单的 select 查询,查询中不包含子查询或者UNION 2、PRIMARY, 3、DERIVED 4、SUBQUERY 5、DEPENDENT SUBQUERY 6、UNCACHEABLE SUBQUREY 7、UNION 8、UNION RESULT |
table | ||
partitions | ||
type | ||
possible_keys | ||
key | ||
key_len | ||
ref | ||
rows | ||
filtered | ||
Extra |
来源:https://www.cnblogs.com/gyjx2016/p/12460885.html