mysql衡量查询开销的3个指标
(2013-07-15 09:58:43)
标签:
it
1、响应时间:包括,cpu处理时间和I/O等待时间等。
2、扫描行数:mysql在本次查询一共扫描了多少行。
3、返回行数:mysql在本次查询一共返回的行数。
在explain语句中的type列反应了访问类型。访问类型有多种,从全表扫描到索引扫描、范围扫描、唯一索引查询、常数引用等。这些速度从慢到快,扫描行数从大到小。
一般mysql使用三种方式应用where条件,
1、在索引中使用where条件来过滤不匹配的行。(这是在存储引擎中完成的)
2、使用索引覆盖扫描(在extra列中出现using
index)来返回记录,直接从索引中过滤不需要的记录并返回命中的结果。(这是在mysql服务层完成的,无须再回到表中查询记录)
3、从数据表中返回数据,然后过滤不满足条件的记录(在extra列中出现using
where)。(这是在mysql服务层完成的,mysql从数据表中读出记录,然后过滤)
以上说明了索引的重要,好的索引可以让查询使用适当的访问类型,尽可能的扫描需要的记录。
但也不是增加索引就能让返回的行数等于返回的行数。
下面使用聚合函数的查询:select actor_id ,count(*) from film_actor group by
actor_id;
这个查询扫描了几千行,返回结果只有几百行。没有什么索引可以减少扫描的行数。
理解一个查询扫描多少行和实际需要的行数需要先理解这个查询背后的逻辑和思想。