当前位置: 首页 > 编程笔记 >

php查询mysql大量数据造成内存不足的解决方法

邓鸿彩
2023-03-14
本文向大家介绍php查询mysql大量数据造成内存不足的解决方法,包括了php查询mysql大量数据造成内存不足的解决方法的使用技巧和注意事项,需要的朋友参考一下

本文实例分析了php查询mysql大量数据造成内存不足的解决方法。分享给大家供大家参考。具体分析如下:

一、问题

使用php查询mysql大数据量的时候,程序尚未执行完毕,跳出警告:
Fatal error:  Allowed memory size of 100663296 bytes exhausted (tried to allocate 103 bytes)
错误提示:php所分配到的100M内存被占用完毕。

二、解决方法:

最简单的解决办法是:在执行文件的头部增加:

ini_set('memory_limit','256M'); 

把内存增加到256M或者更多,可以增大php所使用的内存空间
但是下次若要读取更多的数据该怎么办呢,总不能一次次的增加,导致服务器的内存都被php吃光。

这里介绍一个函数:

使用memory_get_usage()方法获得php使用的内存量。发现随着读取数据条数的增加,php使用的内存在一步步增加。
难道php在查询mysql时的数据是存在内存中的?搜索了一下,发现果真大概就是这个意思。
mysql的C API函数有mysql_use_result()和mysql_store_result()
mysql_store_result()会把结果集从mysqlServer读到客户端,而 mysql_use_result()只是读取了结果集的元信息

1、php的mysql_query调用的是mysql_store_result(),自动获取并缓存结果集
2、而php的另一个函数mysql_unbuffered_query()则是调用的 mysql_use_result(),一方面,这在处理很大的结果集时会节省可观的内存。另一方面,可以在获取第一行后立即对结果集进行操作,而不用等到整个 SQL 语句都执行完毕。

所以我们在读取大量数据的时候,可以使用mysql_unbuffered_query()来替代mysql_query()。经测试,的确如此。而且相当给力,导完所有数据内存一直保持在1MB以内,没有增长过
mysql_unbuffered_query() 向 MySQL 发送一条 SQL 查询 query,但不像 mysql_query()那样自动获取并缓存结果集。一方面,这在处理很大的结果集时会节省可观的内存。另一方面,可以在获取第一行后立即对结果集进行操作,而不用等到整个 SQL 语句都执行完毕。当使用多个数据库连接时,必须指定可选参数 link_identifier。
mysql_unbuffered_query()的好处是有代价的:在 mysql_unbuffered_query()返回的结果集之上不能使用 mysql_num_rows() 和 mysql_data_seek()。此外在向 MySQL 发送一条新的 SQL 查询之前,必须提取掉所有未缓存的 SQL 查询所产生的结果行。
所以一定要结合自己的业务需求适当的选取函数

希望本文所述对大家的php程序设计有所帮助。

 类似资料:
  • 我的Codename One应用程序下载了大约16000条数据记录(每条记录中大约有10个字段)。 在我的Android手机(OS6.0,RAM 2GB)上,它能够加载8000到9000条记录,但随后显示内存不足错误。 从跟踪来看,它似乎用完了分配给应用程序的堆内存。 有什么建议吗?请问处理如此大量数据的理想方法是什么? 这是日志文件

  • 本文向大家介绍python分块读取大数据,避免内存不足的方法,包括了python分块读取大数据,避免内存不足的方法的使用技巧和注意事项,需要的朋友参考一下 如下所示: 以上这篇python分块读取大数据,避免内存不足的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 本文向大家介绍php查询mysql数据库并将结果保存到数组的方法,包括了php查询mysql数据库并将结果保存到数组的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php查询mysql数据库并将结果保存到数组的方法。分享给大家供大家参考。具体分析如下: 这里主要用到了mysql_fetch_assoc函数 mysql_fetch_assoc语法如下:  范例代码如下: 希望本文所述对

  • 本文向大家介绍php将图片保存入mysql数据库失败的解决方法,包括了php将图片保存入mysql数据库失败的解决方法的使用技巧和注意事项,需要的朋友参考一下 本文实例分析了php将图片保存入mysql数据库失败的解决方法。分享给大家供大家参考。具体分析如下: 图片保存数据库并不是一个明智的做法,我们多半是把图片保存到服务器,然后把图片地址保存到数据库,这样我们每次只要读出图片地址就可以显示了,但

  • 本文向大家介绍php+mysqli批量查询多张表数据的方法,包括了php+mysqli批量查询多张表数据的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php+mysqli批量查询多张表数据的方法。分享给大家供大家参考。具体实现方法如下: 注意这里使用到了两个新的函数multi_query与store_result,具体代码如下: 希望本文所述对大家的php程序设计有所帮助。

  • 问题内容: 我从事科学家工作,并使用MySQL作为数值模拟结果的存储库。通常,我有一组通过实验获得的数据和一个对照组。这两个数据集存储在一个表中。一个指示符字段告诉我记录是来自实验还是来自控件集。该表通常具有约1亿条记录。5000万次实验和5000万个控件。 在对数据进行后处理时,我的典型任务是首先发出以下两个查询: 和 我在RC,df上有一个多列索引。这些查询会花费大量时间,而查询会花费大部分时