8.2-8.8
一、8月3日,因blog.blogchina.com首页SQL查询存在效率问题,取消首页Blog人气排行、文章访问/回复排行等功能。
二、博客论坛首页,仿Yahoo版,http://forum.blogchina.com/protal/portal.php,耗时两天(4-5日)
三、博客论坛首页,改进博客公社版,文件现已删除,耗时两天(6-7日)
四、博客论坛首页,subSilver基础上改进版(8日)
五、2日干嘛去忘了,生成添加路由的命令?好像只有几分钟就搞定了,不算吧。
技术备忘:
1.SQL查询优化,把论坛板块分为科技新知生活三类,每类约20-22个版面,从中搜索最新活动的主题的SQL语句:
(1)
select ... from phpbb_forums f, phpbb_topics t where f.forum_id = 20 or
f.forum_id = 22 or f.forum_id = 37 or ... and f.forum_last_post_id =
t.topic_last_post_id
(2) select ... from phpbb_forums f,
phpbb_topics t where ( f.forum_id = 20 or f.forum_id = 22 or f.forum_id
= 37 or ... ) and f.forum_last_post_id = t.topic_last_post_id
(1)
select ... from phpbb_forums f, phpbb_topics t where
f.forum_last_post_id = t.topic_last_post_id and ( f.forum_id = 20 or
f.forum_id = 22 or f.forum_id = 37 or ...
)其中其中,的一种写法是错的,因为and的优先级高于or运算,所以,查询结果上万条,耗时比较长,最终执行的语句实际上是:
select
... from phpbb_forums f, phpbb_topics t where f.forum_id = 20 or
f.forum_id = 22 or f.forum_id = 37 or ...or ( f.forum_id=12 and
f.forum_last_post_id = t.topic_last_post_id )
第三种写法是低效的,它先执行Join操作,后执行筛选操作,尽管在只制定三个版面ID的时候,这个语句耗时仅0.03秒,但,当指定6个版面ID的时候,耗时达0.1秒,疑前时间数据受缓存影响。
第二种写法是最优的,在执行连接操作之前从被连接的表中筛选尽范围可能小的数据记录,指定3-12个版面ID时,耗时均为0.05秒。
至于左连接和右连接,此处不作区分,也不详述。
2.distinct 在MySQL中只有一个实在的用途,那就是和count操作一起执行,否则几乎没有过滤的效果(select distinct col1 from tbl1当然有效,可是几乎没用,谁会只要一个列来distinct?),这和MS SQL大不相同。
3.弄清了phpBB自带的模板引擎的工作机理。
你可以使用这个链接引用该篇文章 http://publishblog.blogchina.com/blog/tb.b?diaryID=41155