优化
forum_post表是存储主题和回复内容的表,是discuz系统中存储内容最多的一个表。对于内容较多的大型站点来说,随着这个表的逐渐增大,已经严重影响了站点的打开速度。Discuz论坛建站程序系统!系统本身已经有了帖子分表功能,但是每次都要手动具体操作办法分表,过一段时间之后主表(forum_post)变的很大。本文介绍一种通过简单修改数据表和系统网站程序的具体的方法实现发帖回帖自动分表存储。 执行思路:将forum_post平均分成10份,分别为pre_forum_post/pre_forum_post_1/pre_forum_post_2/.../pre_forum_post_9,每次发帖回帖之后根据帖子tid按10取余数分别存在不同的表中。 具体执行步骤: 1、后台->全局,关闭网站站点。备份pre_forum_post表和pre_forum_thread表; 2、将网站数据库中的pre_forum_post连续复制10次,分别命名为pre_forum_post/pre_forum_post_1/pre_forum_post_2/.../pre_forum_post_9; 3、分别执行如下sql数据库语句 delete from pre_forum_post where tid!=0; delete from pre_forum_post_1 where tid!=1; delete from pre_forum_post_2 where tid!=2; delete from pre_forum_post_3 where tid!=3; delete from pre_forum_post_4 where tid!=4; delete from pre_forum_post_5 where tid!=5; delete from pre_forum_post_6 where tid!=6; delete from pre_forum_post_7 where tid!=7; delete from pre_forum_post_8 where tid!=8; delete from pre_forum_post_9 where tid!=9; 4、再执行如下sql数据库语句 update pre_forum_thread set posttableid=tid; 5、修改系统文件source\class\model\model_forum_thread.php(修改前记得备份) 找到具体代码如下 $this->tid = C::t('forum_thread')->insert($newthread, true); 在这一行具体代码如下下方加入 $posttableid=($this->tid); if($posttableid){ C::t('forum_thread')->update($this->tid, array('posttableid' =>$posttableid)); } 5、后台,站长,帖子分表,点击更新备注信息。 6、后台,工具,更新缓存。 修改完成! 注意此具体的方法修改后,所有通过discuz!的帖子发布和回复功能产生的内容都是自动分表存储,但是要注意如果用了采集或其他插件发布帖子和回复请记得修改对应的网站程序。 |
Discuz!教程之打开论坛首页显示正在等待notice.uchome.manyou.com...