再使用mysql_query查询超大结果集的时候会出现超出内存限制的致命错误,这是因为mysql_query采用的是查询全部结果然后把结果集全部缓存到内存中的方式。

mysql的查询还提供了另外一种查询方式,函数名为mysql_unbuffered_query,这个函数采用的是查出结果后立即操作结果集,并不会把结果集缓存到内存中,这样就避免了超出内存的情况发生。但是使用这个方法的代价就是不能再查询的时候使用获取总行之类的方法,因为这种方法是便查询边返回结果。同时在使用该方法的时候不能在同一数据库链接上执行其他的操作,想要执行其他操作的时候必须先终止当前操作,释放所有未缓存的sql查询所产生的结果行,或者重新实例化一个数据库连接,使用新链接进行其他操作。

以下是使用缓存和不使用缓存的对比(所查询的表中有1000多万行数据):

function selecttest()

{

try {

$pdo = new PDO("mysql:host=localhost;dbname=test", 'root', '123456');

// 不使用缓存结果集方式

// $pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);

$sth = $pdo->prepare('select * from test');

$sth->execute();

echo '最初占用内存大小:' . memory_get_usage() . "\n";

$i = 0;

while ($result = $sth->fetch(PDO::FETCH_ASSOC)) {

$i += 1;

if ($i > 10) {

break;

}

sleep(1);

print_r($result);

echo '占用内存大小:' . memory_get_usage() . "\n";

}

} catch (Exception $e) {

echo $e->getMessage();

}

}

上面使用到的是缓存所有结果集的方式,运行该函数时将会报超内存的错误,如下所示:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 204800000 bytes) in E:\ProgramDevelopment\RuntimeEnvironment\xampp\htdocs\test\test.php on line 57

Call Stack:

0.0005 135392 1. {main}() E:\ProgramDevelopment\RuntimeEnvironment\xampp\htdocs\test\test.php:0

0.0005 135568 2. test->selecttest() E:\ProgramDevelopment\RuntimeEnvironment\xampp\htdocs\test\test.php:86

0.0055 142528 3. PDOStatement->execute() E:\ProgramDevelopment\RuntimeEnvironment\xampp\htdocs\test\test.php:57

在执行$sth->execute();时超出内存限制;

将// $pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);这行的注释去掉后将使用不缓存结果集的方式,运行该函数将输出以下内容:

最初占用内存大小:144808

Array

(

[id] => 1

[a] => v

[b] => w

[c] => i

)

占用内存大小:145544

Array

(

[id] => 2

[a] => b

[b] => l

[c] => q

)

占用内存大小:145544

Array

(

[id] => 3

[a] => m

[b] => p

[c] => h

)

占用内存大小:145536

Array

(

[id] => 4

[a] => j

[b] => i

[c] => b

)

占用内存大小:145536

Array

(

[id] => 5

[a] => q

[b] => g

[c] => g

)

占用内存大小:145536

可以看到,使用不缓存结果集的方式获取一行结果所占用的内存是极少的。这样就结局了超出内存限制的问题。

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

mysql查出的结果太大 php_如何解决PHP使用mysql_query查询超大结果集超内存问题相关推荐

  1. mysql query结果集_如何解决PHP使用mysql_query查询超大结果集超内存问题

    再使用mysql_query查询超大结果集的时候会出现超出内存限制的致命错误,这是因为mysql_query采用的是查询全部结果然后把结果集全部缓存到内存中的方式. mysql的查询还提供了另外一种查 ...

  2. mysql表数据量太大,达到了1亿多条数据,除了分库分表之外,还有没有其他的解决方式?

    你这是上亿元的问题,horizontal scaling 岂能是几句就说清楚的? 几个问题要考虑 数据的不同数据中心的同步问题,冗余问题, 个数据节点的cap三角问题.数据量一大必须拆分, 不然索引太 ...

  3. 记录一次MySQL两千万数据的大表优化解决过程,提供三种解决方案

    问题概述 使用阿里云rds for MySQL数据库(就是MySQL5.6版本),有个用户上网记录表6个月的数据量近2000万,保留最近一年的数据量达到4000万,查询速度极慢,日常卡死.严重影响业务 ...

  4. 记录一次MySQL两千万数据的大表优化解决过程,提供三种解决方案 1

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:王帅 来源地址:https://yq.aliyun.com/ ...

  5. 干 MySQL 两千万数据的大表优化解决过程,三种厉害的解决方案

    问题概述 使用阿里云rds for MySQL数据库(就是MySQL5.6版本),有个用户上网记录表6个月的数据量近2000万,保留最近一年的数据量达到4000万,查询速度极慢,日常卡死.严重影响业务 ...

  6. 【转载文章】记录一次MySQL两千万数据的大表优化解决过程,提供三种解决方案...

    问题概述 使用阿里云rds for MySQL数据库(就是MySQL5.6版本),有个用户上网记录表6个月的数据量近2000万,保留最近一年的数据量达到4000万,查询速度极慢,日常卡死.严重影响业务 ...

  7. windows软件窗口或者对话框太大超出屏幕解决办法

    软件窗口太大显示不全 问题:软件窗口或对话框太大,最大化也无法显示全部,拖动标题栏移动到屏幕顶部,底部也显示不出来.具体见下面两张图片. 解决方法: 使用第三方工具: 窗口移动精灵 AltDrag 使 ...

  8. mac u盘文件过大 拷贝不进去_mac文件太大无法复制到u盘怎么办-mac文件太大无法拷贝解决方法 - 河东软件园...

    在日常的学习/生活/工作中我们常常使用U盘储存文件,而想必许多用户在Mac上将比较大的文件拷贝到U盘时,常常会出现"文件太大无法拷贝"的错误提示,而此时我们会发现,其实我们的U盘明 ...

  9. MySQL数据单个数据太大,导入不进去

    mysql导入数据,navicat报错: MySQL server has gone away Table Restored: act_ge_bytearray Rolling back... Fin ...

最新文章

  1. 诸暨机器人餐厅价格_现场 | 一家尝出“锅气”的餐厅 探店机器人餐厅
  2. Android项目使用Eclipse进行单元测试
  3. java俄罗斯方块旋转,俄罗斯方块旋转算法研究
  4. 18.外部相机校准——旋转(Rotation),R是什么样子的,绕Z轴旋转的例子,齐次坐标旋转_2
  5. centos安装multipath正确识别、使用存储(最基本的步骤)
  6. 深度图像配准_巧解图像处理经典难题之图像配准
  7. HbuilderX 运行到小程序模拟器
  8. 【未完成】7-7 新浪微博热门话题 (30 分)
  9. 黑盒测试——因果图法
  10. 蔚来、小鹏、理想自动驾驶能力的纵向演进与横向比较
  11. 精挑细选的良心APP,每款都非常惊艳
  12. 一颗椰子糖机器人_椰子糖热量有多高?看完数据后让人避犹不及!
  13. python 董付国程序设计基础与应用第三版pdf_Python 程序设计基础(董付国 著)完整版PDF[6MB]...
  14. android自定义滚动日期,Android基于wheelView实现自定义日期选择器
  15. 机器学习之神经网络图解,生动形象
  16. OLA音频变速算法的仿真与剖析
  17. Java设计模式之设计原则-里氏替换原则 (LSP)
  18. 通达信智能买卖指标公式
  19. Linux1G光口网卡状态灯不亮,电脑网卡灯不亮怎么办 电脑网卡灯不亮解决方法介绍【详解】...
  20. 当我们浏览器访问某个网站时,中间经历了什么,如何到达对方的?

热门文章

  1. 2021年中国低地球轨道卫星(LEO)发射服务市场趋势报告、技术动态创新及2027年市场预测
  2. php订单金额分摊算法,PHP付钱找钱算法
  3. Type Cannot change version of project facet Dynamic Web Module to 3.0
  4. 中国 IPv6 网民活跃用户达 3.62 亿,但 App 支持与国外差距较大!
  5. 10年资深面试官直言:80%人面试Java都会止步于此!
  6. 苹果的廉价机,你也认为“真香”吗?
  7. 提气!阿里平头哥三篇论文入选 ISCA
  8. 沙利文:2019Q4中国公有云市场份额:阿里云、腾讯云、华为云位列前三
  9. 7 招教你轻松搭建以图搜图系统!
  10. 人工智能规模化落地还有哪些坑?阿里副总裁华先胜连麦详解!