MySQL优化之索引的力量
由于兴趣爱好和日常使用需要,对MySQL的使用频率并不算低,但是涉及到MySQL性能优化方面,还是第一次,感到非常神奇,特发文共赏之。
事情的起因是需要帮朋友写一个程序,用于抓取足彩数据,以便计算。数据从2012年1月1日开始抓取,到目前也有2W多场比赛,这样数据库就需要存储比赛数据2W多条,而另一边,一场比赛对应4条分析数据,就是2W*4=8W条数据了,加一起也得10W以上条数,内容上倒是不大,现在还没采集完,预计采集完10W多条数据,数据库也就10M左右。但是该有的问题还是碰到了,采集分析数据,用自循环让php自动抓取,刚开始都很正常,当分析数据采集到4W左右的时候,读取数据库就变得非常慢:
前一个是读取数据库的时间,后一个是 读取数据库+处理采集+入库 的时间,采集入库部分一直很稳定,维持在10秒左右,读取数据库从刚开始的0.0X到现在的60秒。要知道我一次也就处理20条比赛数据,插入80条分析数据,一次执行时间就要1分钟,8W分析数据我就要花费1000分钟,换算成小时就是接近17个小时,而且越往后越慢这一点我也没算进去。这样下去肯定不行,只能考虑MySQL优化了,搜索了一下,最简单的就是MySQL索引了,简单不说,性能提升明显,看网上的例子,查询时间缩短了2/3。
继续搜资料:
MySQL 5.1参考手册:http://dev.mysql.com/doc/refman/5.1/zh/index.html
理解MySQL——索引与优化:http://www.cnblogs.com/hustcat/archive/2009/10/28/1591648.html
这个讲的比手册要通俗一些,但是对于我这样急于投入使用,不想过多研究处理细节的人来说,就有点啰嗦了
详解MySQL中EXPLAIN解释命令:http://database.51cto.com/art/200912/168453.htm
翻手册时看到这个EXPLAIN,顺手搜了下,感觉挺有用的,作为参考
最终还是自己来摸索吧,因为需要join查询,那么就用2个表的关联字段进行索引试试,命令什么的我也懒的弄,直接在phpmyadmin上,在对应字段上点索引,用原来的查询语句丢到phpmyadmin上查询下,速度还行,不知道投入循环会如何:
呃。。。。说实话夜火我是被惊到了,幸福来的太突然不知道怎么表达了。我除了查资料,点了下索引外,就几乎没动什么东西,查询速度直接从要命的60多秒,缩短到0.05秒,执行速度还是10秒左右。这差距,可不止网上说的2/3了,想想之前估算的17个小时,简直不可以道里计,科学是第一生产力,真没说错啊。突然发现MySQL优化也挺好玩的,我之前都一直停留在日常使用,没有关注过这一块,但是一看手册,密密麻麻,非常高深啊,需要学习的还很多啊。
PS. CodeIgniter的系列文章,拖呀拖,拖到现在大半年都过去了,不是没下工夫,草稿都有好几篇了,但是一直都不满意,原创文章也不是那么好写,花时间花精力,写一篇真的不易。有很多日常的技巧、感悟,因为懒得写文章,没有分享出来,事后想写又没有当时的感觉了,索性有感觉就写吧。