使用PHP从查询中获取MySql结果集大小

时间:2010-02-09 10:37:52

标签: php sql mysql database caching

在进行查询时是否可以获得result - 的大小?

我需要设置一个合适的MySql cache_limit(MB),因此我正在尝试一些查询,但我需要知道result的大小 - 用于微调我的缓存配置

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

任何帮助表示赞赏!

由于

3 个答案:

答案 0 :(得分:4)

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

纯SQL

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

Bytes_received  191
Bytes_sent      120

仅从SHOW SESSION STATUS查询中减去字节,并且您具有确切的值。

mysqlnd

PHP 5.3提供了“MySQL本机驱动程序”,它为您提供了一些调试连接的不错选项。

进行查询,然后致电mysqli_get_connection_stats。它也会返回网络统计信息:

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

您需要在这里使用mysqli和mysqlnd,但与纯SQL解决方案一样,您可以获得更准确的数字。

答案 1 :(得分:2)

粗略估计你可以试试

<?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)));

答案 2 :(得分:0)

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

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