php查询mysql大量数据占用大量内存导致内存不足
php查询mysql大量数据占用大量内存导致内存不足
使用mysql查询语句(mysql_fetch_array)查询数据库数据时遇到:PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 32 bytes) .错误提示:php所分配到的128M内存被占用完毕。
最简单的解决办法是:在执行文件的头部增加:ini_set(‘memory_limit’,’256M’);
256M或者更多,可以增大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 语句都执行完毕。
解决办法:
1.所以我们在读取大量数据的时候,可以使用mysql_unbuffered_query()来替代mysql_query()。经测试,的确如此。而且相当给力,导完所有数据内存一直保持在1MB以内,没有增长过 .
2. 使用完mysql_fetch_array 语句查询出结果后,使用mysql_free_result($result) 释放内存.