锁定老帖子 主题:简单的优化mysql,提高查询性能
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-11-23
问题:在php中用select语句查询mysql数据库,返回结果很慢。实在不能忍受 1、最开始的情况: php中的select语句: select article_diffsize.content from article_diffsize,article_info where article_diffsize.ArticleID = article_info.ArticleID and article_info.ArticleName='计算机程序' mysql 两个表article_diffsize,article_info没有建任何索引 结果这个从php中读取数据过程,所花的时间是: 6s啊,这是一个多么长的时间啊。。。 因为对mysql的优化完全没有概念。所以跑去图书馆,借了本书《php 和mysql web 开发》。 看到里面讲用explain可以获取关于sql语句如何执行的信息。运行以后发现rows太多,然后按照方法给article_diffsize,article_info两个表的ArticleID都加上了索引。 2、 时间是: 发现select语句出来是这么个情况: 16311行啊~!!!怎么还有这么多。。 也不知道要怎么办了。 3、 看到书里有一行select语句是用join来实现两个表连接,抱着尝试的心态,把select语句改为如下: select content from article_diffsize left join article_info on (article_diffsize.ArticleID = article_info.ArticleID)where article_info.ArticleName='a' 时间: explain后: 4、 还是不行啊,不过感觉改变select和建立索引是个好方法。。最后,我采用了这种方式: select content from article_diffsize where ArticleID = (select ArticleID from article_info where ArticleName='a') 然后给article_info表的ArticleName建了个索引 然后。。。。。 时间: explain结果: 不到1s的时间。。可以接受了。。。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-12-17
你这个时间的绝对值是firebug看的吧 这个误差太大了 如果一个select执行1秒钟 那是很恐怖的 你应该用mysql执行sql看一下 上面可以看到执行时间
|
|
返回顶楼 | |
发表时间:2011-12-17
select content from article_diffsize where ArticleID = (select ArticleID from article_info where ArticleName='a')
最后的 select语句有一点怪异 不过贴主的文章写的很用心 |
|
返回顶楼 | |
发表时间:2011-12-18
我还不知道 subselect 能用 = 号
|
|
返回顶楼 | |
发表时间:2011-12-19
不错的内容,慢慢学习
|
|
返回顶楼 | |
发表时间:2011-12-20
楼主做performance tuning的方式感觉不是很合适,从web端看response时间是不靠谱的,而且从web端也很难准确的定位性能瓶颈
统计个网站,上面有很多专门做性能分析的工具和方法 http://www.mysqlperformanceblog.com/tools/ |
|
返回顶楼 | |
发表时间:2012-01-05
感谢各位啊。好好学习~~~
|
|
返回顶楼 | |
发表时间:2012-01-17
但愿你的articlename没有重复的
|
|
返回顶楼 | |
发表时间:2012-02-10
select content from article_diffsize where ArticleID = (select ArticleID from article_info where ArticleName='a')
这句话查询有问题,你必须ArticleName没有重复才行。 |
|
返回顶楼 | |
发表时间:2012-02-28
jimmycheng 写道 select content from article_diffsize where ArticleID = (select ArticleID from article_info where ArticleName='a')
这句话查询有问题,你必须ArticleName没有重复才行。 明显有问题,你的ArticleID 是主键吧,你这个sql只能查出一条数据,所以速度这么快。 应该把“=”号改为 in 或者exist吧。 |
|
返回顶楼 | |