论坛风格切换
  • 2415阅读
  • 2回复

关于大站新鲜事首页打开巨慢的原因和解决方法 [复制链接]

上一主题 下一主题
离线龙飞
 

发帖
8
金币
0
威望
5
只看楼主 倒序阅读 使用道具 楼主  发表于: 2012-02-17
新鲜事首页有调用最新主题20条的数据,走的     function getLatestThreads($forumIds, $starttime, $endtime, $offset, $limit)

但是在\mode\o\lib\squareservice.class.php 中使用这个getLatestThreads函数的时候却没有指定开始和结束时间,导致结果是把主题表进行了全表数据的filesort。如果站点有百万条主题帖就是百万条 filesort。这肯定是一个严重的slow query。
解决方法:
在\mode\o\lib\squareservice.class.php 查找
$data = $service->getLatestThreads($openforum, '', '', 0,$limit);
改成
$data = $service->getLatestThreads($openforum, time()-604800, time(), 0,$limit);

原理,加上开始和结束时间,提取一个星期内的最新帖子进行 order by。 减少filesort的row数量。

如何避免
在做order by类似的sql语句时候 一定要注意,大数据量的表要使用where 缩小order by前获取到的row数量,避免大批量的数据进行filesort
1条评分分享分+1
rickyleo 分享分 +1 今天最高的评分,是明天最低的要求 2012-02-17
离线rickyleo

发帖
315
金币
0
威望
99
只看该作者 沙发  发表于: 2012-02-17
今天最高的评分,是明天最低的要求
离线cixinet

发帖
66
金币
8
威望
9
只看该作者 板凳  发表于: 2012-02-18
微博新鲜事那里云大哥也提到过一个慢查询
http://phpwind.me/1142.html
快速回复
限100 字节
如果您在写长篇帖子又不马上发表,建议存为草稿
 
提到某人:
选择好友
上一个 下一个