技术文摘
MySQL 里的 Buffered 和 Unbuffered queries 以及 pdo 的非缓存查询示例
2025-01-15 03:30:59 小编
MySQL 里的 Buffered 和 Unbuffered queries 以及 pdo 的非缓存查询示例
在 MySQL 数据库操作中,理解 Buffered 和 Unbuffered queries 的区别至关重要,这对于优化数据库性能和处理大数据集有着显著影响。掌握 PDO(PHP Data Objects)的非缓存查询示例能帮助开发者更高效地编写代码。
Buffered queries(缓存查询)会一次性将查询结果全部加载到内存中。这在处理小数据集时非常方便,因为开发者可以随时遍历结果集,并且能够随意移动指针位置。例如,使用 mysqli 扩展时,默认执行的就是缓存查询。它的优点在于灵活性高,能够快速响应后续对结果集的操作。然而,当面对大数据集时,缓存查询会消耗大量内存,导致性能下降甚至服务器崩溃。
与之相对,Unbuffered queries(非缓存查询)不会将整个结果集加载到内存,而是逐行从数据库中获取数据。这种方式在处理大数据量时优势明显,极大地减少了内存占用。但是,非缓存查询的局限性在于,一旦开始获取数据,就必须按顺序处理,不能随意移动指针,并且在结果集未处理完之前,无法执行其他查询。
PDO 作为 PHP 中常用的数据库抽象层,提供了非缓存查询的功能。以下是一个简单的 PDO 非缓存查询示例:
try {
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 开启非缓存查询
$stmt = $pdo->query('SELECT * FROM large_table', PDO::FETCH_ASSOC, PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => false);
while ($row = $stmt->fetch()) {
// 处理每一行数据
echo $row['column_name']. "\n";
}
} catch (PDOException $e) {
echo "Error: ". $e->getMessage();
}
在这个示例中,通过设置 PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => false 开启了非缓存查询。在循环中逐行处理数据,避免了一次性加载整个大数据集到内存。
开发者在实际项目中应根据数据集的大小和业务需求,合理选择 Buffered 或 Unbuffered queries,并熟练运用 PDO 的非缓存查询功能,以实现数据库操作的高效性和稳定性。
- 五款企业级 ETL 工具比较,助选项目适配方案
- 容器化进程:我的构建时间去哪了
- iOS 常见调试手段:静态分析
- Java 学习需规避的十大致命陷阱
- 妹子用 MacBook Pro 写出首张黑洞照片核心代码,令人惊艳
- 观看《复联 4》竟能理解 Spring Cloud
- 程序员人口普查:半数码农 16 岁开启代码生涯,中国程序员最为乐观
- 留意这 3 个小细节,Web 性能大幅提升!
- 马蜂窝机票订单交易系统中状态机的应用及优化实践
- 基于物理渲染(PBR)白皮书:迪士尼原则下的 BRDF 与 BSDF 总结
- 前谷歌工程师耗时两年打造“厂外生存指南” 入选 GitHub 热榜 开发工具大全
- 前端性能优化手册(已更新至 React)
- Python 并发之线程与锁
- 百道 Python 面试题助你搞定编程
- Kubernetes 1.14 发布与技术社区演进方向