从查询中获取MySQL结果集大小

3

当进行查询时,是否可以获取结果集的大小?

我需要设置适当的MySQL cache_limit(MB),因此我正在尝试一些查询,但我需要知道结果集的大小以调整我的缓存配置。

query_cache_limit在测量查询(或结果)的大小时到底是做什么的...


你想知道mysql查询结果的字节数吗?你使用的是哪个mysql_fetch函数? - Petah
3个回答

4

有几种方法可以测量从您的mysql服务器发送到php进程的数据大小:

纯SQL

执行查询后直接执行SHOW SESSION STATUS。您将获得多个统计信息,包括发送和接收的字节数:

Bytes_received  191
Bytes_sent      120

仅从一个SHOW SESSION STATUS查询中减去字节,即可获得确切的值。

mysqlnd

PHP 5.3提供了“MySQL Native Driver”,为您提供了一些很好的调试连接选项。

执行查询,然后调用mysqli_get_connection_stats。它还返回网络统计信息:

Array
(
    [bytes_sent] => 43
    [bytes_received] => 80
    ...

你需要在这里使用mysqli和mysqlnd,但与纯SQL解决方案相比,你会获得更准确的数字。

3
作为一个大概的估计,你可以尝试:
<?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)));

这段代码涉及到IT技术,意思是将从数据库中获取的数据进行序列化,并计算其长度。如果需要更详细的解释,请提供更多上下文信息。

strlen不总是能准确反映字节长度,因为响应中可能会有多字节字符串(占用一个字符但多个字节)。 - Adam Hopkinson
非常正确,就像我说的这只是一个估计。 考虑到问题,Camran很可能知道多字节字符串是否会出现问题。 还要考虑到序列化字符串可能无法准确表示与数组相比的大小。 - Petah

0

我相信Petah使用memory_get_usage在之前和之后的方法可能是最简单的方法。要获得更准确的结果,可以使用mb_strlen,但需要循环遍历结果中的每一行和每一行中的每个字段,并随着进行总和。您还需要使用正确的编码。

http://us3.php.net/manual/en/function.mb-strlen.php


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接