MYSQL查询慢的主要原因有哪些?如何分析慢查询?
时间:2019-01-05 22:55 来源:未知 作者:IT
-
通常所说查询慢即响应时间长。一个查询的生命周期:从客户端,到服务器,然后服务器进行解析、执行,最后返回结果给客户端。
-
时间消耗。网络,CPU计算,执行计划,锁等待,调用底层存储引擎获取数据,I/O操作,系统调用等等。
-
查询慢原因。不必要的额外操作,某些操作被额外的重复了很多次,某些操作被执行的太慢等等。
-
访问的数据的太多。
-
索引设置不合理,导致全表扫描。
-
服务器设置不合理,造成资源紧张等原因。
如何分析慢查询?
-
确认SQL是否查询了大量的不必要数据。也就是太多的行,非必要的列。(PHP)
SELECT * FROM warning_event
2. 确认服务器层是否分析了大量超过所需的行。
如何判断?估算响应时间、扫描的行数和返回的行数(EXPLAIN)
SELECT * FROM warning_event WHERE assailant_id=1
EXPLAIN SELECT 1 FROM warning_event WHERE event_code=’1′ limit 1;
+————-+——+——+——+————-+
| select_type | type | ref | rows | Extra |
+————-+——+——+——+————-+
| SIMPLE | ALL | NULL | 285 | Using where |
+————-+——+——+——+————-+
event_code增加索引
+————-+——+——-+——+————————–+
| select_type | type | ref | rows | Extra |
+————-+——+——-+——+————————–+
| SIMPLE | ref | const | 1 | Using where; Using index |
+————-+——+——-+——+————————–+
SHOW FULL PROCESSLIST
比较重要的一个字段:State
Query:正在执行查询或者发送数据到客户端
Locked:等待锁
Analyzing and statistics:收集统计信息,生成查询执行计划
Copying to tmp table [on disk]:正在执行的查询将结果集放到临时表中,GROUP BY操作、文件排序操作、UNION操作,on disk这个临时表在硬盘上
Sorting result:对结果集进行排序
(责任编辑:IT)
如何分析慢查询?
SELECT * FROM warning_event 2. 确认服务器层是否分析了大量超过所需的行。 如何判断?估算响应时间、扫描的行数和返回的行数(EXPLAIN) SELECT * FROM warning_event WHERE assailant_id=1 EXPLAIN SELECT 1 FROM warning_event WHERE event_code=’1′ limit 1; +————-+——+——+——+————-+ | select_type | type | ref | rows | Extra | +————-+——+——+——+————-+ | SIMPLE | ALL | NULL | 285 | Using where | +————-+——+——+——+————-+ event_code增加索引 +————-+——+——-+——+————————–+ | select_type | type | ref | rows | Extra | +————-+——+——-+——+————————–+ | SIMPLE | ref | const | 1 | Using where; Using index | +————-+——+——-+——+————————–+ SHOW FULL PROCESSLIST 比较重要的一个字段:State Query:正在执行查询或者发送数据到客户端 Locked:等待锁 Analyzing and statistics:收集统计信息,生成查询执行计划 Copying to tmp table [on disk]:正在执行的查询将结果集放到临时表中,GROUP BY操作、文件排序操作、UNION操作,on disk这个临时表在硬盘上 Sorting result:对结果集进行排序 (责任编辑:IT) |