当进行查询时,是否可以获取结果集的大小?
我需要设置适当的MySQL cache_limit
(MB),因此我正在尝试一些查询,但我需要知道结果集的大小以调整我的缓存配置。
query_cache_limit
在测量查询(或结果)的大小时到底是做什么的...
有几种方法可以测量从您的mysql服务器发送到php进程的数据大小:
执行查询后直接执行SHOW SESSION STATUS
。您将获得多个统计信息,包括发送和接收的字节数:
Bytes_received 191
Bytes_sent 120
仅从一个SHOW SESSION STATUS
查询中减去字节,即可获得确切的值。
PHP 5.3提供了“MySQL Native Driver”,为您提供了一些很好的调试连接选项。
执行查询,然后调用mysqli_get_connection_stats
。它还返回网络统计信息:
Array
(
[bytes_sent] => 43
[bytes_received] => 80
...
<?php
// This is only an example, the numbers below will
// differ depending on your system
echo memory_get_usage() . "\n"; // 36640
$a = mysql_fetch_assoc($result);
echo memory_get_usage() . "\n"; // 57960
unset($a);
echo memory_get_usage() . "\n"; // 36744
?>
或者
echo strlen(serialize(mysql_fetch_assoc($result)));
我相信Petah使用memory_get_usage在之前和之后的方法可能是最简单的方法。要获得更准确的结果,可以使用mb_strlen
,但需要循环遍历结果中的每一行和每一行中的每个字段,并随着进行总和。您还需要使用正确的编码。