【顶级教学 第二期】批量删除重名标题帖子与清理删除帖子过后残留的垃圾,减少数据库读取和查询
44001494 1月前

上期我发了一个教程“6W个主题帖子秒加载论坛,秒进网站,数据库读取速度提高百分百!”优化后的速度已经很明显了。

  但是由于我内容都是在各个网站采集的,他们的资源很大部分都是相同的标题,导致我采集了很多文章标题重名的主题,于是我用插件批量删除只保留一个。但是我发现之前采集时还有很多重名的文章,也不可能一个一个去搜标题查询是否重名,一次性清理不完。所以我用数据库执行语句来操作:

方法:宝塔打开你的xiuno网站数据库,进入数据表中找到SQL,执行语句。

 

储存帖子数据的分别是“bbs_mythread”“bbs_post”“bbs_thread”“bbs_tag_thread”这4张表

我发现,其中bbs_thread表是储存帖子标题的,bbs_post表是储存帖子内容的,他们都不在同一张表下,bbs_mythread表是储存用户中心发主题记录的,bbs_tag_thread表是标签关联文章的,

首先我用删帖插件试了一下,发现帖子中但凡绑定TAG标签的帖子删除后,关联文章的标签表中数据依然存在,这里我只能说垃圾,这就是xiuno插件不通用都是单独的坏处,所有插件都不能兼容使用。
所以我的逻辑是这样的:首先,先把bbs_thread中标题重复的数据删除掉,只留下1个,执行代码:

DELETE t1 FROM bbs_thread t1
JOIN bbs_thread t2 
WHERE t1.tid > t2.tid AND t1.subject = t2.subject;

此时相同标题的文章删除后,储存内容的表,数据还没有被删除。然后获取标题的fid值,也就是文章的id,分别对“bbs_mythread”“bbs_post”“bbs_tag_thread”这3张表进行查询fid值,如果fid与bbs_thread表的fid不存在则删除该条数据。
SQL依次执行以下代码:


处理bbs_post表留存垃圾

 

DELETE bbs_post
FROM bbs_post
LEFT JOIN bbs_thread ON bbs_post.tid = bbs_thread.tid
WHERE bbs_thread.tid IS NULL;


处理bbs_mythread表个人用户中心主题记录留存垃圾

DELETE bbs_mythread
FROM bbs_mythread
LEFT JOIN bbs_thread ON bbs_mythread.tid = bbs_thread.tid
WHERE bbs_thread.tid IS NULL;


处理标签表bbs_mythread关联主题留存垃圾

DELETE bbs_tag_thread
FROM bbs_tag_thread
LEFT JOIN bbs_thread ON bbs_tag_thread.tid = bbs_thread.tid
WHERE bbs_thread.tid IS NULL;

 

效果图:

执行清理了一大堆垃圾,读取速度又快了1秒。
上一期的教程我有一张是我3天一共采集发布差不多7W个帖子的截图。使用清理重名标题的帖子后少了足足5W个帖子,包括清理了之前帖子关联的标签数据,用户主题发帖记录等。

所以,以后发现重名过多的数据时可以利用刚刚的方法来执行操作数据库表。记得每次清理前先执行一遍bbs_thread标题表的SQL语句再依次执行“bbs_mythread”“bbs_post”“bbs_tag_thread”这三张表!教程都在上面,可以从开头的第一个SQL语句代码开始执行,一共是执行4次语句,然后进网站后台清理一下缓存。

如果出现报错,或者执行时间过久报错,那就是你数据库配置没给他分配超时时长。宝塔,打开数据库插件,进入配置搜索:innodb_lock_wait_timeout参数,默认时长好像是50还是60,可以根据你xiuno的数据库中储存的表数据大小来更改,数据较多就设置时长大一点,他的单位是秒,填写数字就行,配置好后重启数据库或者重载数据库!

教程结束,觉得有用就回帖给我顶上去,如果觉得有用的人不少的话,后面我可以出一期利用宝塔的计划任务来定时执行清理语句的教程。

最新回复 (9)
全部楼主
  • 44001494 楼主
    1月前 2
    0
    浅唱竟然想让我当版主,咳,不敢当不敢当。。。
  • ttt111
    1月前 3
    0
    不错不错
  • Tillreetree 版主
    1月前 4
    0
    44001494 浅唱竟然想让我当版主,咳,不敢当不敢当。。。
    只要对社区有大贡献就有机会当版主(是完全可选的)(我的版主就是这么给的)
  • xiaoyang6
    1月前 5
    0
    我要拿出这帖子奉献给世人赏阅,我要把这个帖子一直往上顶,往上顶!顶到所有人都看到为止! 
  • didiaog
    1月前 6
    0
    感谢楼主ing!!!
  • juse
    1月前 7
    0
    牛逼,插个眼儿
  • 流口水的鱼
    1月前 8
    0
    厉害了,值得学习
  • woniu18
    1月前 9
    0
    kankan
  • ranxiaojie
    27天前 10
    0
    你就是我心中的那首忐忑,总是让我惊心动魄。 
返回