注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

phperwuhan的博客

记载一个phper的历程!phperwuhan.blog.163.com

 
 
 

日志

 
 

使用mysql的explain做select类型的sql语句的性能分析和优化  

2010-05-06 11:59:08|  分类: mysql |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

来源:http://www.hetaoblog.com/?p=96

数据库操作是非常耗性能的,首先是IO密集型的,另外一个方面对CPU也有相当的消耗。
同时,在实际性能分析和优化的过程中,select语句的分析和优化也是工作的重点。因为通常insert/update/delete操作的sql语句不会特别复杂,但是select操作的sql语句可能会异常复杂,我在实际项目中遇到的一些复杂sql有100多行,据说一些大型互联网公司的1条sql有时要运行10多天。
这里,对使用mysql的explain命令对select语句的sql分析做一个简单介绍。
1. Explain命令的基本语法如下,
Explain select ****
2. Explain语句其实就是对mysql如何处理select语句,生成执行计划,具体而言,比如是使用索引来查询,还是做全表扫描,比如做表连接的时候,使用那种方式连接等。如果刚开始使用explain,重点关注type这列。Type的值重点关注有没有all,如果有all的话,说明使用了全表扫描,性能较差,当表格数据较多的时候,全表扫描对语句的性能影响是很大的;
3. 下面是几个例子,分别显示了几条sql语句的执行计划,这里,第3条sql语句的性能是最差的,因为这条sql的where条件列没有索引,所以必须通过一个全表扫描来完成,当表格记录较多时,性能会急剧下降;就这个情况而言,如果业务上对这条sql使用频繁,那么可以通过在该字段上加索引来完成。
mysql> explain select count(*) from wp_posts where id > 10 and comment_count > 2;
+—-+————-+———-+——-+—————+———+———+——+——+————-+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+—-+————-+———-+——-+—————+———+———+——+——+————-+
| 1 | SIMPLE | wp_posts | range | PRIMARY | PRIMARY | 8 | NULL | 4 | Using where |
+—-+————-+———-+——-+—————+———+———+——+——+————-+
1 row in set (0.00 sec)

mysql> explain select * from wp_comments a, wp_posts b where a.comment_post_id=b.id;
+—-+————-+——-+——–+—————–+———+———+————————–+——+——-+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+—-+————-+——-+——–+—————–+———+———+————————–+——+——-+
| 1 | SIMPLE | a | ALL | comment_post_ID | NULL | NULL | NULL | 1 | |
| 1 | SIMPLE | b | eq_ref | PRIMARY | PRIMARY | 8 | wpblog.a.comment_post_ID | 1 | |
+—-+————-+——-+——–+—————–+———+———+————————–+——+——-+
2 rows in set (0.00 sec)

mysql> explain select * from wp_posts where comment_count > 2;
+—-+————-+———-+——+—————+——+———+——+——+————-+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+—-+————-+———-+——+—————+——+———+——+——+————-+
| 1 | SIMPLE | wp_posts | ALL | NULL | NULL | NULL | NULL | 14 | Using where |
+—-+————-+———-+——+—————+——+———+——+——+————-+
1 row in set (0.00 sec)

  评论这张
 
阅读(557)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017