爱黑武论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11|回复: 0

[网站技术] DZ X3.4评论超过1万的帖子打开非常慢怎么解决?

[复制链接]
 楼主| 发表于 2026-11-7 00:37 | 显示全部楼层 |阅读模式

立即注册,加入爱黑武论坛的大家庭!爱黑武,爱上搞机生活!

您需要 登录 才可以下载或查看,没有账号?立即注册

x
比如这条帖子https://bbs.ihei5.com/forum.php? ... &extra=page%3D1


评论已经有13231,数据库换成InnoDB以后打开依然非常慢,而且有一个现象是打开 page=1 比 page=1324 要慢很多。

找解决方案找了好久,在Google AI的帮助下终于解决了。

首先:
1、为 MySQL 强制建立“倒序联合索引”
  1. ALTER TABLE pre_forum_post ADD INDEX idx_tid_dateline_desc (tid ASC, dateline DESC);
复制代码


• 为什么有用: 这个索引在磁盘里存储时,就是把同一个 tid 下的回复按照最新时间在最前排好序的。
• 效果: 再次打开第一页(LIMIT 0, 10)时,MySQL 会立刻在这个新索引的头部直接抓取前 10 条,扫描行数直接从 13242 行暴跌至 10 行,第一页的打开速度会从 1.4秒 瞬间变成 0.001秒!

2、修改 Discuz! 源码,强制使用该索引
打开论坛目录下的:/source/class/table/table_forum_post.php

找到255行的位置,可以看到251-255这几行的原始代码如下:

  1.                 $query = DB::query('SELECT * FROM %t WHERE tid=%d'.
  2.                                 ($parameter['invisible'] ? ' AND '.$parameter['invisible'] : '').($parameter['authorid'] ? ' AND '.$parameter['authorid'] : '').
  3.                                 ' '.$parameter['orderby'].
  4.                                 ' '.DB::limit($start, $limit),
  5.                                 array(self::get_tablename('tid:'.$tid), $tid));
复制代码


将这里改成:
  1.                 $query = DB::query('SELECT * FROM %t FORCE INDEX (idx_tid_dateline_desc) WHERE tid=%d'.
  2.                                 ($parameter['invisible'] ? ' AND '.$parameter['invisible'] : '').($parameter['authorid'] ? ' AND '.$parameter['authorid'] : '').
  3.                                 ' '.$parameter['orderby'].
  4.                                 ' '.DB::limit($start, $limit),
  5.                                 array(self::get_tablename('tid:'.$tid), $tid));
复制代码


看到区别了吗,其实只是在251第一行的位置,加上了“FORCE INDEX (idx_tid_dateline_desc)”

保存好,上传到服务器覆盖table_forum_post.php文件即可享受丝滑。

如果你开启了 OPcache(操作码缓存),那还要有一步,重启你的php,让新代码生效。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|Archiver|手机版|小黑屋|爱黑武论坛 ( 京ICP备2023028323号 | 京公网安备11011202000270号 )

GMT+8, 2026-11-7 02:02 , Processed in 0.043842 second(s), 5 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2026, ihei5.com

快速回复 返回顶部 返回列表