mysql_unbuffered_query pdo_php中mysql操作的buffer知识
php与mysql的连接有三种方式,mysql,mysqli,pdo。不管使用哪种方式进行连接,都有使用buffer和不使用buffer的区别。
什么叫使用buffer和不使用buffer呢?
客户端与mysql服务端进行查询操作,查询操作的时候如果获取的数据量比较大,那个这个查询结果放在哪里呢?
有两个地方可以放:客户端的缓冲区和服务端的缓冲区。
我们这里说的buffer指的是客户端的缓冲区,如果查询结果已经从服务端获取回来了,放置在了客户端的缓冲区,我们就称之为使用buffer。如果还是存放在服务端的缓冲区的话,我们就说没有使用buffer(unbuffer)。
使用buffer和不使用buffer有什么区别?
主要在内存方面,使用buffer会增加客户端的内存压力,当返回的数据结果特别大的时候可能会占用调用客户端(实际就是一个php进程)比较大的进程。不使用buffer自然对服务端(这里说的是提供mysql服务的服务器)压力更大。
php中三种模式是如何设置是否使用buffer的?
mysql默认的query是使用buffer的,而不使用buffer就需要使用mysql_unbuffer_query
mysqli默认的query是不使用buffer的,要使用buffer就需要设置MYSQLI_STORE_RESULT
pdo默认的quey是不使用buffer的,要使用buffer就需要设置MYSQL_ATTR_USE_BUFFERED_QUERY
大致相关代码如下: <?php
$dbConfig = array(
'host' => '10.128.11.101',
'port' => '3306',
'user' => 'test',
'pass' => 'test',
'db' => 'test',
);
$sql = 'select * from so_topic_app';
//---------mysql----------//
$db = mysql_connect($dbConfig['host'], $dbConfig['user'], $dbConfig['pass']);
mysql_select_db($dbConfig['db'], $db);
mysql_set_charset('utf8', $db);
// mysql使用buffer
$res = mysql_query($sql, $db);
$data = array();
while($row = mysql_fetch_row($res)) {
$data[] = $row;
}
// mysql不使用buffer
$res = mysql_unbuffered_query($sql, $db);
$data = array();
while($row = mysql_fetch_row($res)) {
$data[] = $row;
}
mysql_close($db);
//---------mysqli----------//
$db = mysqli_connect($dbConfig['host'], $dbConfig['user'], $dbConfig['pass'], $dbConfig['db']);
// mysqli不使用buffer
$result = mysqli_query($db, $sql);
$data = array();
while($row = $result->fetch_array()) {
$data[] = $row;
}
// mysqli使用buffer
$result = mysqli_query($db, $sql, MYSQLI_STORE_RESULT);
$data = array();
while($row = $result->fetch_array()) {
$data[] = $row;
}
mysqli_free_result($result);
mysqli_close($db);
//---------pdo----------//
$dsn = "mysql:dbname={$dbConfig['db']};host={$dbConfig['host']}";
$pdo = new PDO($dsn, $dbConfig['user'], $dbConfig['pass']);
// pdo不使用buffer
$stmt = $pdo->prepare($sql);
$stmt->execute();
$data = array();
$data = $stmt->fetchAll();
// pdo使用buffer
$pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
$stmt = $pdo->prepare($sql);
$stmt->execute();
$data = array();
$data = $stmt->fetchAll();
后续
当然如果数据量非常大的话,大部分人还是会考虑使用分批次来提取和处理数据。所以实际上需要我们关注和使用mysql是使用buffer还是不使用buffer的场景非常少。
mysql_unbuffered_query pdo_php中mysql操作的buffer知识相关推荐
- 'mysql_attr_use_buffered_query'_php中mysql操作的buffer知识
php与mysql的连接有三种方式,mysql,mysqli,pdo.不管使用哪种方式进行连接,都有使用buffer和不使用buffer的区别. 什么叫使用buffer和不使用buffer呢? 客户端 ...
- ubuntu中mysql操作_uBuntu下安装MySql,及mySql操作!
1. 从网上安装 sudo apt-get install mysql-server.装完已经自动配置好环境变量,可以直接使用mysql的命令. 注:建议将/etc/apt/source.list中的 ...
- Ubuntu 中Mysql 操作
一.mysql服务操作 0.查看数据库版本 sql-> status; 1.net start mysql //启动mysql服务 2.net stop mysql //停止mysql服务 3. ...
- Linux中MySQL操作
一.登录MySQL 1. 启动: MYSQL启动文件在/etc/init.d目录下,启动运行以下命令 /etc/init.d/mysql start 2. 停止: /usr/bin/mysqladmi ...
- php中mysql_PHP中MySQL操作
本次使用的demo是MySQL的示例数据库employees, PHP中的demo代码可以在 这里使用的是 一.连接数据库 1.1.连接 打开一个到 MySQL 服务器的连接.有面向对象风格和过程化风 ...
- mysqli mysql pdo_PHP中MySQL、MySQLi和PDO的用法和区别
PHP的MySQL扩展(优缺点) 设计开发允许PHP应用与MySQL数据库交互的早期扩展.mysql扩展提供了一个面向过程 的接口: 并且是针对MySQL4.1.3或更早版本设计的.因此,这个扩展虽然 ...
- PHP中MySQL操作相关方法
mysql_result() 传回第几笔记录,指定关键字 int mysql_result(int result,int row,mixed field) mysql_free_result()释放查 ...
- mysql中需要提交的操作_MySQL常用操作及基础知识
原标题:MySQL常用操作及基础知识 1.启动和关闭mysql服务器: service mysql start service mysql stop 2.重启MySQL服务: service mysq ...
- [Python从零到壹] 八.数据库之MySQL和Sqlite基础知识及操作万字详解
欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...
最新文章
- linux单步跟踪命令,dbx调试跟踪的常用子命令
- linux 内核编译 错误 fatal error: linux/compiler-gcc6.h: No such file or directory
- UA STAT675 统计计算I 随机数生成7 Envelope Accept-Reject Algorithm
- Django中的日期和时间格式 DateTimeField
- 详解C语言中 # 和 ## 的用法
- java enummap_Java EnumMap containsValue()方法与示例
- 网页特效代码大全网址
- matlab 可视化(specifier)
- Flash:LoadVars数据提交与表单处理
- 高数特殊符号-希腊字母
- Navicat 数据库可视化工具远程连接MySQL及基本操作
- CSS - 鼠标指针样式详解(cursor光标样式、自定义指针图片)
- 【机器学习】对数线性模型之Logistic回归、SoftMax回归和最大熵模型
- Pytest setup teardown
- (转)四旋翼飞行器基本知识
- 英雄互娱A股上市路:被收购、独立IPO、借壳均被按下暂停键
- 【Linux】进程间通信(学习复习兼顾)
- 文化怪杰--辜鸿铭全传!
- numpy 计算最大回撤
- EasyRecovery适用于Windows和Mac的专业数据恢复软件
热门文章
- 漫画通信:惊呆了,手机登录还可以这么玩!
- Android Native 内存泄漏系统化解决方案
- 坚持探索与落地并重,阿里巴巴云原生之路全景揭秘
- 高性能服务器架构思路【不仅是思路】
- 亿级消息系统的核心存储:Tablestore发布Timeline 2.0模型
- 阿里巴巴、支付宝员工都在用的知识管理工具,究竟有何特别?
- 这些数据科学家必备的技能,你拥有哪些?
- 2017双11交易系统TMF2.0技术揭秘,实现全链路管理
- 真香!8 行代码搞定最大子数组和问题
- 谷歌云试图抢占SAP软件云市场;企业上云迎来“黄金时代”;IBM和SAP帮助金融机构加快采用云技术……...