数据到百万、亿级时,列表页和分页要注意什么?

已解决 提问于 2026-10-25 提问者:超级管理员 13 次阅读

准备往里灌几百万条内容,想知道哪些写法在这个量级会出事。

回答(1)

已采纳最佳答案
  • 2026-10-25 回答 最佳答案

    系统自带的保护(不用你改代码):

    • 两段式分页:先 SELECT id 再 IN (...) 回表,避免大偏移 LIMIT 100000,20 的深翻页灾难;
    • 列表页默认不算总数:栏目页用 simple 分页,不做 COUNT(*)。亿级实测 COUNT 要 25.8 秒,而用户根本不看"共 N 条"——所以模板里别引用 {$pager.total}(它是 0);
    • sitemap 全量输出但走游标分批,内存恒定。

    你要做的:

    1. 按文档建好索引,开 opcache(亿级场景强烈建议开 apcu / redis);
    2. 不要在模板里写 ORDER BY views 这类需要全表排序的查询;
    3. 深翻页(第 5000 页这种)用搜索/筛选缩小范围,而不是让人翻到底;
    4. 日志表会涨得很快,按文档做定期归档。

    FPM 下别配数据库连接池,长连接会把连接数打满。

写回答

该问题已解决,不再接受新的采纳。