我们应该分别使用 mysqli_free_result 释放 mysql 结果,否则这将消耗服务器 RAM 资源。
如下所示
<?php
$link = mysqli_connect('Hostname','Username','Password','Database');
echo '<br/>Memory Usage Before Query = '.memory_get_usage(false); $resultResource = mysqli_query($link, 'SELECT * FROM test');
echo '<br/>Memory Usage after Query = '.memory_get_usage(false); $result = array();
while ($result[] = mysqli_fetch_assoc($resultResource)) {}
echo '<br/><br/>Memory Usage Before Free Result = '.memory_get_usage(false); mysqli_free_result($resultResource);
echo '<br/>Memory Usage After Free Result = '.memory_get_usage(false); ?>
输出如下。
查询前的内存使用量 = 449464
查询后的内存使用量 = 466528
释放结果前的内存使用量 = 474208
释放结果后的内存使用量 = 457336
因此,可以观察到在执行查询后存在内存使用情况。一旦查询执行完成,数据库服务器就会立即将结果返回到 Web 服务器。然后处理 Web 服务器上的结果,以便从 Web 服务器上的资源链接中获取。
此外,还观察到使用 mysqli_free_result 后内存使用量较少,因为通过提供相应的资源链接,释放了 Web 服务器上为相应查询存储的资源。