如何计算每页使用的MySQL查询总数?

时间:2009-05-06 16:28:31

标签: php mysql count

PHP或MySQL中是否有内置函数可以提供页面上使用的MySQL查询总数?我在许多网站(主要是论坛)上看到过,他们在底部有一条消息,上面写着“在0.6秒内生成20页查询页面”。

如果没有内置任何东西,那么我会在我的数据库类中添加一些东西来计算它们,但它似乎已经可用的那种功能。

4 个答案:

答案 0 :(得分:7)

选项一是通过包装器传递所有查询:

function custom_mysql_query($sql)
{
    $GLOBAL['query_count'] ++;
    return mysql_query($sql);
}

请注意,这只是为了说明而没有错误处理等。

您可以在MySQL中查询运行的查询数量:

mysql> SHOW STATUS LIKE 'Com_select';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Com_select    | 2     | 
+---------------+-------+
1 row in set (0.00 sec)

您可能想要执行以下操作:

SHOW STATUS LIKE 'Com_%';

然后将Com_select,Com_update,Com_insert和Com_delete

加在一起

答案 1 :(得分:4)

我所做的是创建一个重要的sql查询类,每次运行类中的查询方法时,它会向一个名为querycount的变量添加1,这样我就有了一个运行总计。

答案 2 :(得分:3)

PHP的原生mysql / mysqli扩展中没有任何内置功能。如果您正在使用数据库抽象层,则可能会内置某种类型的分析/基准测试,以便为您提供该信息。

副手,我知道Kohana通过Profiler库执行此操作。我认为大多数框架的DB库都做类似的事情。

如果您对使用第三方框架或数据库抽象层犹豫不决,我通过简单地继承PHP5的内置PDO类获得了成功。您可以添加一些基本的基准测试信息和查询计数,并将query()execute()调用传递给父类。

答案 3 :(得分:2)

为了避免全局变量,在db类中:

class db {
    public static $query_count = 0;

    public static function query($str) { 
        self::$query_count++;
        // your db query method here
    }
}

然后只需访问您的静态查询计数:

<?= db::$query_count ?>