CI框架查询大数据量数据库分页优化解决方案

云萱姑娘_4040

云萱姑娘_4040

2026-08-17

680人浏览

原创

ci框架大数据分页优化需禁用查询日志、改用游标分页、id分批缓存及前端约束页码;禁用$this->db->save_queries、基于主键游标查询、redis缓存id列表、限制page≤200并启用懒加载。

ci框架查询大数据量数据库分页优化解决方案

CI框架处理大数据量分页时,内存暴涨、响应缓慢、甚至脚本崩溃,根本原因不在数据本身,而在框架默认行为与查询方式的叠加效应。关键要切断“无用记录”和“低效扫描”的双重开销。

关闭数据库查询日志记录

CI默认开启 $this->db->save_queries,每条SQL及其执行时间都被缓存到内存中。百万级循环分页时,这些日志会吃掉数百MB内存,且完全无业务价值。

  • 在分页逻辑开始前加一行:$this->db->save_queries = FALSE;
  • 如需临时调试,可仅在开发环境开启,生产环境必须禁用
  • 该设置不影响SQL执行,只停止日志收集,零风险、立竿见影

改用游标分页(推荐用于后端API)

传统 LIMIT offset, size 在偏移量大时性能断崖式下跌,因为MySQL仍要扫描跳过的所有行。游标分页基于上一页最后一条记录的主键值推进,避免全表扫描。

人工智能数字技术机器人全息大脑大数据分析矢量素材(EPS)
人工智能数字技术机器人全息大脑大数据分析矢量素材(EPS)

这是一款人工智能数字技术机器人全息大脑大数据分析矢量素材,格式为 EPS,含 JPG 预览图。

下载
  • 首次请求:SELECT * FROM orders WHERE status = 1 ORDER BY id ASC LIMIT 50
  • 后续请求:SELECT * FROM orders WHERE status = 1 AND id > 123456 ORDER BY id ASC LIMIT 50
  • CI中可封装为方法:$this->db->where('id >', $last_id)->order_by('id')->limit(50)
  • 要求:排序字段必须有索引、不可为空、全局唯一(主键最佳)

分批处理 + 手动分页缓存

对导出、后台报表等非实时场景,不建议每次翻页都查库。可先将符合条件的数据ID批量取出,存入Redis或临时表,再按ID分页读取详情。

  • 第一步:查出全部匹配的主键ID(例如 SELECT id FROM logs WHERE created_at > '2025-01-01'),用 batch_insert 或 Redis List 存储
  • 第二步:按页取ID段,再用 WHERE id IN (...) 查详情(注意IN数量限制,单次不超过500)
  • 优势:主键查询极快;ID列表可设置过期时间;支持并发读取不同页

前端配合:禁用深度跳页 + 启用懒加载

用户翻到第1000页毫无意义,反而拖垮数据库。应在业务层主动约束,同时降低首屏压力。

  • CI控制器中校验:if ($page > 200) { show_error('超出允许页码范围'); }
  • 列表页启用滚动懒加载,初始只加载前20条,滚动到底部再通过AJAX拉取下一批(带游标参数)
  • 搜索框强制添加时间范围、状态等过滤条件,避免全表扫描

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
大数据分析工具有哪四个
大数据分析工具有哪四个

大数据分析的四个工具分别是rapidminer、Hpcc、Hadoop和Pentaho bi。大数据分析用于从各种来源生成的原始数据中提取有价值的数据。这些数据帮助我们获得有意义的见解、隐藏的模式、未知的相关性、市场趋势等等,具体取决于行业。大数据分析的主要动机是提供有价值的见解,以便为未来做出更好的决策。php中文网为大家带来了大数据分析的相关教程、以及相关文章等内容,供大家免费下载使用。

2023.06.21

3956

5

Java 大数据处理基础(Hadoop 方向)
Java 大数据处理基础(Hadoop 方向)

本专题聚焦 Java 在大数据离线处理场景中的核心应用,系统讲解 Hadoop 生态的基本原理、HDFS 文件系统操作、MapReduce 编程模型、作业优化策略以及常见数据处理流程。通过实际示例(如日志分析、批处理任务),帮助学习者掌握使用 Java 构建高效大数据处理程序的完整方法。

2025.12.08

1189

12

大数据专业学习教程
大数据专业学习教程

本专题整合了大数据专业学习相关教程,阅读专题下面的文章了解更多详细内容。

2026.01.05

203

5

python处理大数据合集
python处理大数据合集

本专题整合了python处理大数据相关教程,阅读专题下面的文章了解更多详细内容。

2026.01.05

426

22

Java 单元测试
Java 单元测试

本专题聚焦 Java 在软件测试与持续集成流程中的实战应用,系统讲解 JUnit 单元测试框架、Mock 数据、集成测试、代码覆盖率分析、Maven 测试配置、CI/CD 流水线搭建(Jenkins、GitHub Actions)等关键内容。通过实战案例(如企业级项目自动化测试、持续交付流程搭建),帮助学习者掌握 Java 项目质量保障与自动化交付的完整体系。

2025.10.24

926

26

PHP CodeIgniter框架
PHP CodeIgniter框架

本专题专注于 PHP 轻量级框架 CodeIgniter 的学习与应用,系统讲解 MVC 模型、路由与控制器、数据库操作、表单验证、安全机制以及 REST API 开发。通过博客系统、内容管理平台和小型电商等实战项目,帮助学员快速掌握 CodeIgniter 的开发方法与实践技能。

2025.08.28

3239

16

Vibeknow在线使用入口合集
Vibeknow在线使用入口合集

本专题汇总了Vibeknow在线创作视频的官方入口及网页版使用教程,涵盖PPT、PDF、Word等文档一键转讲解视频的核心操作,并整理了免费版水印规则与手机端浏览器访问指南,助你快速将知识内容视频化。

2026.09.21

0

20

NumPy随机数文件读写与dtype数据类型
NumPy随机数文件读写与dtype数据类型

本专题整理 NumPy 随机数、文件读写与 dtype 数据类型相关教程,覆盖 Generator/random、随机数种子、正态分布采样、npy/npz/CSV/TXT 保存读取、loadtxt/savetxt、memmap、大文件处理、astype 类型转换、结构化 dtype、整数溢出和精度丢失等场景。

2026.09.21

0

24

NumPy矩阵运算与线性代数计算
NumPy矩阵运算与线性代数计算

本专题整理 NumPy 矩阵运算与线性代数计算相关教程,覆盖矩阵乘法、dot 与 @ 运算符、逆矩阵、行列式、特征值与特征向量、SVD、线性方程组、欧氏距离、矩阵分解和大规模矩阵性能优化等内容,帮助读者掌握 np.linalg 与矩阵计算实战。

2026.09.21

0

20

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 169人学习

大数据(MySQL)视频教程完整版
大数据(MySQL)视频教程完整版

共200课时 | 26.8万人学习

PHP会话控制/文件上传/分页技术
PHP会话控制/文件上传/分页技术

共22课时 | 2.8万人学习