数据到百万、亿级时,列表页和分页要注意什么?
准备往里灌几百万条内容,想知道哪些写法在这个量级会出事。
回答(1)
已采纳最佳答案-
2026-10-25 回答 最佳答案
系统自带的保护(不用你改代码):
- 两段式分页:先
SELECT id再IN (...)回表,避免大偏移LIMIT 100000,20的深翻页灾难; - 列表页默认不算总数:栏目页用 simple 分页,不做
COUNT(*)。亿级实测 COUNT 要 25.8 秒,而用户根本不看"共 N 条"——所以模板里别引用{$pager.total}(它是 0); - sitemap 全量输出但走游标分批,内存恒定。
你要做的:
- 按文档建好索引,开 opcache(亿级场景强烈建议开 apcu / redis);
- 不要在模板里写
ORDER BY views这类需要全表排序的查询; - 深翻页(第 5000 页这种)用搜索/筛选缩小范围,而不是让人翻到底;
- 日志表会涨得很快,按文档做定期归档。
FPM 下别配数据库连接池,长连接会把连接数打满。
- 两段式分页:先
写回答
该问题已解决,不再接受新的采纳。